ソニックの部屋

主にプログラミングに関する記事を投稿します

RailsでECサイトを作る

コード整形

docker compose run --rm web bundle exec rubocop -A
docker compose run --rm web bin/htmlbeautifier

binding.pry

docker attach rails_ec-web-1

DBリセット&seed追加

docker compose run --rm web bundle exec rails db:migrate:reset    
docker compose run --rm web bundle exec rails db:seed

# rake taskの実行
docker compose run --rm web bundle exec rake promotion_code:generate

Herokuへデプロイ

git push heroku dev_checkout:main
heroku pg:reset -a shrouded-dusk-65815
heroku run rails db:migrate
heroku run rails db:seed

# rake taskの実行
heroku rake promotion_code:generate

Herokuで管理者設定

heroku config:set BASIC_AUTH_USER="admin"
heroku config:set BASIC_AUTH_PASSWORD="pw"

Herokuエラー確認方法

heroku logs --tail
heroku run rails c

Herokuアプリ削除※S3等の設定が再度必要になるため注意

1、setteingからapp削除
2、git remote rm heroku

Dockerで管理者設定

# .envファイルに以下追記
BASIC_AUTH_USER=user
BASIC_AUTH_PASSWORD=password
# docker composeファイルに以下追加
version: '3'
services:
  app:
    container_name: "app"
    build:
      context: .
      dockerfile: Dockerfile
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    ports:
      - 3000:3000
    external_links:
      - db
    volumes:
      - .:/app

    # 追記
    env_file:
      - .env

pathの確認

http://localhost:3000/rails/info/routes

delete出来ない時(GETメソッドになる時)

docker compose run --rm web bundle exec rake assets:precompile

参考文献

商品一覧機能実装

docker compose exec web bundle update --bundler 

商品詳細機能実装

商品管理機能実装

http://admin@localhost:3000/login
<%= form_with model: item, url: admin_items_path do |f| %>
# .rubocop.ymlを編集
# Rails/ReversibleMigrationの警告を無効化
Rails/ReversibleMigration:
  Enabled: false

カート機能実装

  • railsでの画像の表示方法
こうではなく
<img class="d-block mx-auto mb-4" src="../assets/images/bootstrap-logo.svg" alt="" width="72" height="57">
こう(アセットヘルパーの使用)
<%= image_tag("bootstrap-logo.svg", alt: "Bootstrap Logo", width: 72, height: 57, class: "d-block mx-auto mb-4") %>
  • カート情報の永続化(オプション): セッションは通常、ブラウザを閉じたり、タブを閉じたりすると破棄されるため、カート情報を永続化するためのデータベーステーブルを設計し、カート内のアイテムを永続的に保存する方法を実装することも考えられます。GPT3.5
  • importmapをインストールするとコンフリクトになる⚫︎
Add Importmap include tags in application layout
File unchanged! Either the supplied flag value not found or the content has already been inserted!  app/views/layouts/application.html.erb
Create application.js module as entrypoint
    conflict  app/javascript/application.js
Overwrite /myapp/app/javascript/application.js? (enter "h" for help) [Ynaqdhm] n
web:
    tty: true
    stdin_open: true
  • Railsのfind_or_create_byメソッドは、Active Recordを使用してデータベースからレコードを検索し、存在しない場合に新しいレコードを作成します。このメソッドは、特定の条件に一致するレコードが既に存在するかをチェックし、存在する場合はそのレコードを返し、存在しない場合は新しいレコードを作成して返します。
  • Fat Controllerを避ける→コントローラーからモデルにロジックを集約する

チェックアウト機能実装

入明細実装

プロモーションコード機能実装

  • Rakeとは、Rubyで書かれたコードをタスクとして作成しておき必要に応じて呼び出し実行する事が出来る機能
  • ロジックはビューではなくなるべくコントローラーに書く