2

假设具有嵌套资源的Post-模型:Comment

resources :posts do
  resources :comments
end

app/views/comments/_form.html.haml(erb 也会这样做)看起来应该如何,以便它还提供帖子的 id 以附加评论?

目前我知道的唯一一种方法是手动添加带有帖子 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'

编辑:使用 Mongoid,而不是 ActiveRecord。

谢谢。

4

1 回答 1

4

帖子的 ID 实际上会在 URL 中。如果您rake routes在终端/控制台中输入内容,您将看到嵌套资源的模式定义如下:

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

看一下方法吐出来的html,form_for具体看 标签的actionurl 。<form>你应该看到类似的东西action="/posts/4/comments"

假设您在 , 中仅定义一次resources :comments作为routes.rb嵌套资源resources :posts,那么您可以安全地修改CommentsController#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 回答