为关联的has_many模型创建表单

时间:2011-08-03 23:44:19

标签: ruby-on-rails ruby-on-rails-3 associations

此示例显示如何为关联模型“评论”创建表单,其中“评论”属于“发布”和“发布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?

1 个答案:

答案 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