1
我有两个模型Contract
和Addendum
。合同has_many :addendums
和附录belongs_to :contract
Ruby on Rails - 在另一个模型的表单中添加模型的字段
创建新合同时,会自动创建一个新的附录,但需要一些附属元素来创建新附录。我如何在合同的表格中添加一个字段value
,这是来自附录但不是来自合同的属性?
我有两个模型Contract
和Addendum
。合同has_many :addendums
和附录belongs_to :contract
Ruby on Rails - 在另一个模型的表单中添加模型的字段
创建新合同时,会自动创建一个新的附录,但需要一些附属元素来创建新附录。我如何在合同的表格中添加一个字段value
,这是来自附录但不是来自合同的属性?
你在找什么是嵌套表格,这在RoR中很常见。有关嵌套和复杂表单的更多信息,请参阅section of a Rails Guide for that。我建议检查所有Rails Guides,这在学习框架时非常有用。
对于您的具体问题,请先告诉您的Contract
型号为accept_nested_attributes_for
您的Addendum
型号。
class Contract < ActiveRecord::Base
has_many :addendum
accepts_nested_attributes_for :addendums
end
接下来,打开你的合同控制器,做两件事。一,在制作新的contract
时建立一个addendum
。二,在contract_params
方法中允许addendums
的嵌套属性(假设你使用rails 4)。
class ContractController < ApplicationController
def new
@contract = Contract.new
@addendum = @contract.addendums.build
end
protected
def contract_params
params.require(:contact).permit(:field1, :field2, addendums_attributes: [:id, :value, :other_field])
end
end
最后,在你的contract
S型加forms_for
帮手。
<%= form_for @contract do |f| %>
<!-- contract fields -->
Addendums:
<ul>
<%= f.fields_for :addendums do |addendums_form| %>
<li>
<%= addendums_form.label :value %>
<%= addendums_form.text_field :value %>
<!-- Any other addendum attributes -->
</li>
<% end %>
</ul>
<% end %>
因此,你应该全部设置!快乐的编码!
c.f. http://railscasts.com/episodes/196-nested-model-form-part-1或修订版本。 – Ari
谢谢你的回复,它的工作。但是,在合同主管人员身上,我怎样才能访问有关附录属性的参数值?它不应该是params [:addendum] [:value]? – NunoRibeiro
使用嵌套参数,只需在'create'或'update'控制器方法中使用'@ contract.assign_params(contract_params)'来分配'contract_params'。然后你可以简单地调用'@ contract.addendum.first.value'来获得你的第一个附录的价值。那是你在找什么? –