Nun*_*iro 2 forms ruby-on-rails custom-fields
我有两个型号Contract和Addendum.合同has_many :addendums和附录belongs_to :contract
创建新合同时,将自动创建新的附录,但创建新附录需要一些附加要素.如何value在合同表格中添加一个字段,该字段是附录中的属性,而不是合同中的属性?
您正在寻找的是嵌套表单,这在RoR中很常见.有关嵌套和复杂表单的更多信息,请参阅Rails指南的一部分.我建议查看所有Rails指南,这些在学习框架时非常有用.
对于您的具体问题,请先告诉您的Contract模型accept_nested_attributes_for您的Addendum模型.
class Contract < ActiveRecord::Base
has_many :addendum
accepts_nested_attributes_for :addendums
end
Run Code Online (Sandbox Code Playgroud)
接下来,打开你的合同控制器,做两件事.一,建立addendum新的时候contract.二,addendums在你的contract_params方法中允许嵌套属性(假设你使用的是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
Run Code Online (Sandbox Code Playgroud)
最后,forms_for以contracts形式添加帮助器.
<%= 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 %>
Run Code Online (Sandbox Code Playgroud)
有了这个,你应该全力以赴!快乐的编码!