Ruby on Rails – 在另一个Model的表单上添加Model中的字段
我有两个模型Contract
和Addendum
。 合同has_many :addendums
和附录belongs_to :contract
创建新合同时,将自动创建新的附录,但创建新附录需要一些附加要素。 如何在合同表格中添加字段value
,该字段value
是附录中的属性,而不是合同中的属性?
您正在寻找的是嵌套表单 ,这在RoR中很常见。 有关嵌套和复杂表单的更多信息,请参阅Rails指南的一部分 。 我建议查看所有Rails指南 ,这些在学习框架时非常有用。
对于您的具体问题,请首先告诉您的Contract
模型accept_nested_attributes_for
您的Addendum
模型。
class Contract < ActiveRecord::Base has_many :addendum accepts_nested_attributes_for :addendums end
接下来,打开你的合同控制器,做两件事。 一,在contract
新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
表单中添加forms_for
帮助程序。
<%= form_for @contract do |f| %> Addendums: <%= f.fields_for :addendums do |addendums_form| %> - <%= addendums_form.label :value %> <%= addendums_form.text_field :value %>
<% end %>
<% end %>
有了这个,你应该全力以赴! 快乐的编码!