Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 嵌套形式的布尔切换_Ruby On Rails_Ruby_Ruby On Rails 4_Boolean_Nested Resources - Fatal编程技术网

Ruby on rails 嵌套形式的布尔切换

Ruby on rails 嵌套形式的布尔切换,ruby-on-rails,ruby,ruby-on-rails-4,boolean,nested-resources,Ruby On Rails,Ruby,Ruby On Rails 4,Boolean,Nested Resources,我有一个问题控制器和一个嵌套的注释控制器。我的评论表单位于我的问题显示视图中 我试图在评论时添加一个复选框,该复选框将在我的问题上切换:closed=>boolean属性 <%= form_for @issue.comments.build, url: script_issue_comments_path(@script, @issue) do |f| %> <!-- Form , etc--> <%= form_for [@script, @issue] do

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

我试图在评论时添加一个复选框,该复选框将在我的
问题上切换
:closed=>boolean
属性

<%= 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

您拥有的内部表单没有嵌套表单(在rails术语中),并且正如您所发现的,它不会以您想要的方式运行,因为它实际上与外部表单的提交无关

您可以采取的一种方法是,在注释上添加类似于
comment\u closes\u issue
的属性,这样可以避免comments controller同时负责编辑问题(我认为这会很混乱)。然后,当您保存注释时,如果
comment\u closes\u issue
为true,则更新父问题。。。这仍然会使两个模型之间的界限变得模糊一些,但是如果它们紧密相连,那么在您的应用程序中,这也许是可以的

编辑-下面是一个如何处理该问题的示例,假设评论属于某个问题:

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
class注释

那么在你看来,你可以让
..

听起来不错,你能更新你关于
如何
的答案来编码(第一次遇到这种问题)。@minijohn Sure。我添加了一个示例,对模型的结构方式进行了一些假设。希望能有帮助。工作很有魅力,谢谢!!