Open20

Ruby on Rails

FumiFumi

リンクはlink_to? href??(2021.8.15)

link_toはヘルパー機能でありlink_toで記載するとhtml上ではhrefに書き換えてくれる

FumiFumi

カート機能(2021.8.15)

カート機能作成

Rails5でカート機能を作るためのロジックを作ってみた

「カートを空にする」の考え方

[Rails]ECサイトのカート機能
カートを空にするには、all.destroy的なコマンドはあるのか?
→もともとailsにdestroy_allというアクションがそなわっている

注文確定前の確認画面

確認する際にconfirmアクション

カート部分のアクション、コマンドの流れ

  • items/show
    カートに入れるのはcartitemsのCreateアクション

  • カートを空にする
    destroy.allコマンド

  • ショッピングカートの情報入力に進む
    ※ここまではcartitemsの情報の確認のみ
    情報はどこに届けるか?
    →支払方法を確定させるためlink_toで注文情報入力htmlに飛ばす

  • (例)orders/1/orders_items/1
    更新したい場合に注文履歴詳細のビューでformwithをつかってURLを指定
    その後コントローラー内でupdateさせる

  • 注文情報入力html
    ここで既にordersテーブルに飛んでいる
    -クレカとお届け先を入力後、確認画面へ進むでconfirm
    注文を確定ではじめてordersCreate

FumiFumi

namespaceについて(2021.8.16)

adminはnamespace、publicはmoduleにする。

adminはURLに表示させわかりやすく。
publicはURLに表示させず、かつコントローラーはpublicの中にあるように。
Railsのroutingにおけるscope / namespace / module の違い

moduleを使う時のコントローラー作成

namespeceの時の

$ rails g controller admin/items

のように

$ rails g controller public/customers

とする

FumiFumi

日時の実装(2021.8.16)

<%= @post_image.created_at.strftime('%Y/%m/%d') %>

'%Y/%m/%d'の記述で、年/月/日のフォーマットへ変換

FumiFumi

POSTアクション(2021.8.16)

POSTは1度だけviewを表示できるが、情報を受け取った後にreloadするとviewを表示できなくなる。
→カート機能のconfirmアクションはPOSTで設定
※GETは何度でもviewを表示できる

FumiFumi

ECサイトのcustomerに関するセキュリティー(2021.8.17)

customersコントローラ部分には「:id」使用しない
current_customerを使用することでログインしている人以外は操作できないように設定する
→URLにidを含まないことで悪用を防ぐことができ、セキュリティー効果高い

FumiFumi

booleanの設定(2021.8.19)

booleanのDEFAULT値、FALSEの設定は後から追加する際、schema.rbの変更を行う必要があるため、可能であれば設計時に追加するほうがいい。

FumiFumi

Rails kaminariによるページネーション設定(2021.8.21)

kaminari:コントローラへの記述

 def index
    @items = Item.page(params[:page]).reverse_order.per(10)
  end
FumiFumi

deviceをインストールした後db:migrateができない問題(2021.8.21)

そもそもrails g deviseとは・・・
『devise機能を実装した』モデルができるということ
今回はもともとadminというモデルを作成していたため重複してエラーに!

→rails db:rollback STEP=7 でもともとあった(device機能を含んでいない)adminモデルを削除する
→直接手で消す
→rails db:migrate・・・・などの手順で重複したadminモデルを削除していく作業
※消す前に記述されていたものは新しく作ったモデルに再度記述し直す必要がある!要確認"

※この時migrationファイルなどを操作してしまったが、問題ないか?
→競合してコンフリクトするのはスキーマくらい
→古いファイルは削除する
→develop brunchへ移動
→git リセット:git reset --hard・・・(前の環境に紐づいてる数字)
→git pull origin develop



↑いつもの手順

FumiFumi

退会処理について(2021.8.14、22)

退会処理の設計方法

退会フラグ命名方法

退会フラグーisdeletedなど

退会処理の理論削除

1分でわかる論理削除 -メリットとデメリットを考える
[Rails]paranoiaを使わずに退会機能を実装する(ユーザーを論理削除する)
→上記参考にオリジナルアクション「hide」「out」を作成して論理的削除を行う方法でよい

「本当に退会しますか?」の部分の実装のさせ方

withdraw、unsubscribe それぞれのアクションを定義する

FumiFumi

Rails 管理者パスワードなどの管理(2021.8.24)

あらかじめ設定した管理者ログイン方法は

rails db:seed

にて取り込む
※確認作業
rails c のあとにAdmin.allと入力
→ターミナルにEmail test@test が表示されればOK
(exitでrails cからぬける)
※設定したパスワードなどは
db seeds.rb
で確認できる

FumiFumi

params、変数の設定(2021.8.24)

privateのparamsの記述とform_withで書いたカラム名は一致する必要あり!!
引っ張って来れていないものはコントローラへ@〜〜のような形式で定義する
※item_id を引っ張るためにhiddn field を使用したりと工夫必要
(ユーザーがわざわざ入力する必要のない情報の時に使用)
hidden_fieldの使い方

FumiFumi

Rails save時のエラーについて(2021/8/25)

.save は失敗してもエラーメッセージがでにくい
(ターミナル上でも成功したメッセージが出て来ないくらいでわかりづらい)
→.saveのよこに ! をいれて.save!としてやるとエラーがあがってくる
※saveでのエラーはバリデーションのことが多い

FumiFumi

ステータスの実装(2021.8.25)

制作ステータス、注文ステータスなどへの反映

新しい値はちゃんと送られてきているかbyebugをつかって確認
→@order = Order.find(params[:id])
params id があっているか確認する
→@order.update(新しい値)
以上がちゃんとできていると@orderはちゃんと新しい値で更新された事になる

ここで条件分岐!!
@order.order_statusの状態で条件分岐させる

@order.order_statusが入金確認の時は、@orderに関連する全てのordered_itemの
product_statusを制作待ちにしたい

@orderに関連する全てのordered_itemがほしい

@orderに関連する全てのorderd_itemをeachでループさせて、その中でorder_itemの
product_statusを制作待ちのステータスに更新する

FumiFumi

Rails confirmのアクションの使い方(2021.8.25)

order.findはデータベースからモデルを通してparams[:id]を探してくる
確認したい際にはまだモデルに保存されていないためアクションはnewを使用

同じviewページで同じ名前の変数を使用すると一番最後のものに上書きされてしまうため

  • 変数名を変える(new_addresss、address_optionなど)
  • コントローラの Order.new. params[: ]の部分に欲しい変数をいれこむ

※アドレスの選択についてはルビー(Rails)の「ケース文」を調べてみる
 whenを使用してparams [:order] [:address_option]二次元配列で記述
※form_with でOrderモデルを指定しなくてもよい

さらに、ストロングパラメーターをもう1つ設定する