首页 文章

为关联的has_many模型创建表单

提问于
浏览
0

此示例显示如何为关联模型“注释”创建表单,其中“注释”属于“发布”和“发布has_many”注释 .

http://edgeguides.rubyonrails.org/getting_started.html#generating-a-controller

我如何修改它以显示表单中的所有注释,并仍然让它调用CommentsController(而不是让表单调用PostsController,如此处的示例http://railscasts.com/episodes/17-habtm-checkboxes)?

谢谢

UPDATE:

要问一个不同的方法:使用多态关联,如果照片和文章每个'has_many'评论,评论表格应该调用CommentsController,如图所示http://railscasts.com/episodes/154-polymorphic-association - 但是如果我在一个表格中为给定的照片编辑多个评论怎么办?在这种情况下,表单是否仍然会调用CommentsController,还是最好调用PhotoController?

1 回答

  • 1

    这是更新的答案:

    我仍然使用 CommentsController 来完成评论的所有更新 . 除非您同时编辑帖子及其评论 . 既然你发表了评论,那么你可以做的只是 POST 这些评论控制器中的一个动作 . 在您的视图中,为每个评论创建一个包含 fields_for 的表单 .

    然后,他们都可以在 CommentsController 中发布 update_multiple (或类似命名的东西)动作 . 这只是接受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
    

相关问题