此示例显示如何为关联模型“评论”创建表单,其中“评论”属于“发布”和“发布has_many”评论。
http://edgeguides.rubyonrails.org/getting_started.html#generating-a-controller
我如何修改它以显示表单中的所有注释,并仍然让它调用CommentsController(而不是让表单调用PostsController,如此处的示例http://railscasts.com/episodes/17-habtm-checkboxes)?
由于
更新
要问一个不同的方式:使用多态关联,如果Photo和Article每个'has_many'注释,注释表单应该调用CommentsController,如下所示http://railscasts.com/episodes/154-polymorphic-association - 但是如果我正在编辑多个怎么办?给定照片的一种形式的评论。在这种情况下,表单是否仍然会调用CommentsController,还是最好调用PhotoController?
答案 0 :(得分:1)
以下是更新后的答案:
我仍然使用CommentsController
来完成评论的所有更新。除非您同时编辑帖子及其评论 。由于您正在编辑帖子的评论,您可以做的只是POST
他们对评论控制器中的操作。在您的视图中,为每个评论制作一个fields_for
的表单。
然后,他们都可以在update_multiple
中发布CommentsController
(或类似命名的内容)操作。这只是接受params哈希并正确解析它的问题。
def update_multiple
# I'd expect the params hash to look like:
# {"comments" => {"1" => {"body" => "my body"}, "comment_2" => {"body" => ""}}
# To keep your controllers thing, stick it into the model!
if Model.update_multiple params[:comments]
respond_to do |f|
#...
end
end
end
在你的模型中(通过在事务中完成所有操作来使其更加健壮,所以如果一个失败,那么它们都不会更新。嗯,这真的取决于你):
def self.update_multiple(hash)
updated_all = true
hash.each do |key, value|
comment = self.find key.to_i
updated_all = false unless comment.update_attributes(value)
end
updated_all
end