私は標準が属しており、Post
とComment
の間に多くの関係があります。ネストされたリソースを持たない子フォーム内で親IDを渡す方法
new
アクションのポストIDを提供し、私は
%li= link_to 'New comment', new_comment_path(post_id: @post.id)
呼んで私のポストショービュー内の今
#post.rb
class Post < ApplicationRecord
has_many :comments
end
#comment.rb
class Comment < ApplicationRecord
belongs_to :post, dependent: :destroy
end
#routes.rb
resources :posts
resources :comments, except: [:index, :show]
。 URLは次のようになります。 /comments/new?post_id=6
。
ここで問題が発生します。フォームを埋めると、post_idは引き継がれず、作成アクションに送られず、Post must exist
というエラーが出ます。 params
ハッシュを見ると、明らかにpost_id
が見つかりません。
質問:post_id
を渡して新しいComment
を作成するにはどうすればよいですか?ネストされたルートの他に別の方法がありますか?もしそうなら、それは望ましい(またはRailsの)方法ですか?おそらくresources
メソッドから指定されたcreate
のカスタムルートを作成する必要がありますか?
ネストされたルートを使用してこの問題を解決できることがわかっています。作成アクションは、親ID(Post
)を見つけるための適切なURLを持つためです。しかし、私はRailsの内部動作をより完全に理解しようとしているので、代替方法を見つけることを試みています。
これは機能しました。これを達成する他の方法を知っていますか? – Lotix
私は他の方法については気づいていませんが、 'Comment'は常に' Post'に関連しなければならないので、ネストされたルートを使うのが最良の解決策だと思います。 – s3tjan