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