Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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 另一个Rails 3嵌套表单问题_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 另一个Rails 3嵌套表单问题

Ruby on rails 另一个Rails 3嵌套表单问题,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,因此,我有以下几点: class ComplexAssertion < ActiveRecord::Base has_many :assertion_groups has_many :assertions, :through => :assertion_group class AssertionGroup < ActiveRecord::Base belongs_to :complex_assertion has_many :assertions, :depe

因此,我有以下几点:

class ComplexAssertion < ActiveRecord::Base
  has_many :assertion_groups
  has_many :assertions, :through => :assertion_group

class AssertionGroup < ActiveRecord::Base
  belongs_to :complex_assertion
  has_many :assertions, :dependent => :destroy, :autosave=>true

class Assertion < ActiveRecord::Base
  belongs_to :assertion_group
<%= form_for(@complex_assertion) do |f| %>
<div class="childGroup1" style="padding:5px;">
      <%= f.fields_for :assertion_groups do |assertion_group_fields| %>
      <%= assertion_group_fields.fields_for :assertions do |assertion_fields| %>
      Type: <%= assertion_fields.collection_select :assertion_type_id, AssertionType.all, :id, :name %>
      Attribute: <%= assertion_fields.collection_select :attribute_name, Attribute.find_by_sql("select distinct a.name from attributes a "), :name, :name %>
      <%= assertion_fields.label :operator_type_id %>: <%= assertion_fields.collection_select :operator_type_id, OperatorType.all, :id, :value %>
      Value: <%= assertion_fields.text_field :value, :size=>'1' %>
      <% end %>
          <div id="innerOperator">
            <!--OPERATOR BETWEEN EACH ASSERTION IN A GROUP-->
            <%= assertion_group_fields.collection_select :logical_operator_type_id, LogicalOperatorType.all, :id, :value %>
          </div>
      <% end %>
    </div>
    <div id="createComplex" align="center">
       <%= f.submit :value=>'Submit' %>
    </div>
<% end %>
我已经尝试了多次修改以使其正确工作,但我认为我缺少一些非常基本的逻辑。谁能给我指出正确的方向吗?我的印象是,如果我正确地完成模型并使用Form_构建器,Rails将处理插入和关系

谢谢

添加了控制器代码-非常普通

def create
@complex_assertion = ComplexAssertion.new(params[:complex_assertion])
respond_to do |format|
  if @complex_assertion.save
    format.html { redirect_to(@complex_assertion, :notice => 'Complex assertion was successfully created.') }
    format.xml  { render :xml => @complex_assertion, :status => :created, :location => @complex_assertion }
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @complex_assertion.errors, :status => :unprocessable_entity }
  end
end
end

您的
ComplexAssertion
类应该如下所示

class ComplexAssertion < ActiveRecord::Base
  has_many :assertion_groups
  has_many :assertions, :through => :assertion_group

  accepts_nested_attributes_for :assertion_groups # <= add this
class AssertionGroup < ActiveRecord::Base
  belongs_to :complex_assertion
  has_many :assertions, :dependent => :destroy, :autosave=>true

  accepts_nested_attributes_for :assertions # <= add this

您可以在(“嵌套属性示例”、“一对多”)中找到更多信息。

在这种情况下,添加控制器代码会很有帮助,因为这就是堆栈跟踪所指向的位置……添加该行后,我重新启动了服务器,提交表单并得到错误:unknown attribute:assertion\u group如果没有任何代码或堆栈跟踪,将很难帮助您,但是您的断言组接受断言字段。为了清楚起见,我更新了我的答案以反映这一点。请。让我知道你需要什么。我很乐意把它放在这里。我已经改变了我的模型,完全符合你上面所说的。当我这样做时,不会为这个块编写任何表单:我看不到任何错误,只是:assertion\u组没有表单,然后是:assertions显然没有表单。所以我很清楚:一个复杂的断言有多个断言\u组-在assertion\u groups表中有一个复杂的断言\u ID。然后,断言组由断言组成,断言组表中有一个断言ID。也许我的思维是倒退的。但是…表单应该创建一个新的包含组和组包含断言的复杂断言。
class AssertionGroup < ActiveRecord::Base
  belongs_to :complex_assertion
  has_many :assertions, :dependent => :destroy, :autosave=>true

  accepts_nested_attributes_for :assertions # <= add this