2

ネストされたリソースを持つPost-モデルを想定します。Comment

resources :posts do
  resources :comments
end

コメントを添付する投稿のIDも提供するように、app/views/comments/_form.html.haml(erbも同様に機能します)はどのように見える必要がありますか?

私が知っている現在の唯一の方法は、投稿IDを使用して非表示の入力を手動で追加することです。汚く見えます。

より良い方法はありますか?Railsがネストされたリソースを理解しpost_id、を非表示の入力として自動的に含めることを期待していました。

= form_for [@post, @comment] do |f|
  .field
    f.label :body
    f.text_field :body
    hidden_field_tag :post_id, @post.id
  .actions
    = f.submit 'Save'

編集:ActiveRecordではなくMongoidを使用します。

ありがとう。

4

1 に答える 1

4

投稿のIDは実際にはURLに含まれます。ターミナル/コンソールに入力rake routesすると、ネストされたリソースのパターンが次のように定義されていることがわかります。

POST    /posts/:post_id/comments    {:controller=>"comments", :action=>"create"}

form_forメソッド によって吐き出されるHTMLを見て、具体的にはタグのactionURLを見てください。<form>のようなものが表示されるはずですaction="/posts/4/comments"

のネストされたリソースとして、で1resources :commentsだけ定義したとすると、アクションを次のように変更しても安全です。routes.rbresources :postsCommentsController#create

# retrieve the post for this comment
post = Post.find(params[:post_id])
comment = Comment.new(params[:comment])
comment.post = post

または、次のようparams[:post_id]にインスタンスに渡すこともできます。comment

comment.post_id = params[:post_id]

これがお役に立てば幸いです。

ネストされたフォーム/モデルの詳細については、次のRailscastを参照することをお勧めします。

于 2010-11-13T17:44:37.547 に答える