嵌套表单中的布尔切换

时间:2014-06-04 11:24:55

标签: ruby-on-rails ruby ruby-on-rails-4 boolean nested-resources

我有一个Issues控制器和一个嵌套的Comments控制器。我的评论表单位于我的问题显示视图

我正在尝试在评论时添加一个复选框,以便切换:closed => boolean上的Issue属性。

<%= form_for @issue.comments.build, url: script_issue_comments_path(@script, @issue) do |f| %>

<!-- Form , etc-->

<%= form_for [@script, @issue] do |f| %>
  <%= f.check_box :closed %> Mark as Closed
<% end %>

<% end %>

这显然不起作用。怎么能实现这个目标?

基本上我会将注释复选框放在评论的提交按钮旁边。因此,如果选中,则问题属性:closed将设置为True

1 个答案:

答案 0 :(得分:1)

你所拥有的内部形式不是嵌套形式(以rails术语表示),并且你发现它不会以你想要的方式表现,因为它与外形的提交没有关联

你可以做的一种方法,就是让评论控制器不能同时负责编辑问题(在我看来会很麻烦),就是要有一个类似comment_closes_issue属性的东西。评论。然后,当您保存评论时,如果comment_closes_issue为真,那么更新父问题......它仍然模糊了两个模型之间的界限,但是如果它们紧密相关,那么也许这样就可以了你的申请。

编辑 - 这是一个如何处理它的例子,假设一个注释属于一个问题:

class Comment < ActiveRecord::Base
  belongs_to :issue

  after_save :close_parent_issue, if: :comment_closes_issue

  private

  def close_parent_issue
    issue.update_attributes closed: true
  end
end

然后在您看来,您可以<%= f.checkbox :comment_closes_issue %>...