rails初心者です。表題の件で、理解を確認したいことがあり、投稿いたします。
2点確認させてください。
①deviseのcurrent_MODELというヘルパーがあります。 これをどのように使用するべきか
②適切なroutesの作り方(ネストとroutesの関係)
現在、練習でQ&Aサイトを作成していますがその際、deviseのcurrent_MODELというヘルパーがあります。
これを使って以下のようなコードを書きました。これについて、私が理解していることが正しいのか、間違っているのか、
確認させてください。
@answer = current_user.answers.build
上記に関して、以下のモデルを作成しており、相互に関連付けを行っています。
**Userモデル** class User < ApplicationRecord has_many :questions, dependent: :destroy has_many :respond_answers, class_name: "Answer", dependent: :destroy end **Questionモデル** class Question < ApplicationRecord has_many :answers belongs_to :user end **Answerモデル** class Answer < ApplicationRecord belongs_to :question belongs_to :responder, class_name: "User", foreign_key: "user_id" end
それに対して、ルートは以下のように設定しています。
※ネスト構造が深くなりすぎることを懸念し、questionとanswerはネストさせていません。
resources :users, only: [:index, :show] resources :questions resources :answers do resources :comments, shallow: true resources :likes, only: [:create] end
私の理解
①
answers_controller.rbで、特定のuserがanswerを作ることができると考え、
@answer = current_user.answers.build
などとしていましたが、これは、無駄なのではないかと考えました。
そう考えた理由は、pathにあります。つまり、この回答の表示は、
questions/show.html.erbで行います。
その際のpathは、/questions/:id です。
もし、user/:user_id/answers/:idなどとしたければ、current_user.answersもOKだと思うのです。
しかし、今回のように、/question/:idのページでの表示だと、current_userを使う必要はないのでは、
と感じました。この理解は大丈夫でしょうか?
②
次に、上記に関連して、pathの作り方と、controllerでの表現方法の関連性ですが、
controllerでネストを作る際は、パスの構造に大きく影響するのではないかと考えています。
例えば、@comment = @post.comments.build(@@@)とする場合は、
pathが/posts/:id/comments/ をしたい場合であり、この場合は、current_user.commentsとは
絶対にならない、と理解しています。この理解で大丈夫でしょうか?
railsでcontrollerやviewを作成していく際に、最初の起点となるのは、
このroutesの作り方で、これが間違うと、後々大きく影響するのではないかと考えています。
回答1件
あなたの回答
tips
プレビュー