2014-06-19 176 views

回答

6

你在找什么是嵌套表格,这在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 %> 

因此,你应该全部设置!快乐的编码!

+2

c.f. http://railscasts.com/episodes/196-nested-model-form-part-1或修订版本。 – Ari

+0

谢谢你的回复,它的工作。但是,在合同主管人员身上,我怎样才能访问有关附录属性的参数值?它不应该是params [:addendum] [:value]? – NunoRibeiro

+0

使用嵌套参数,只需在'create'或'update'控制器方法中使用'@ contract.assign_params(contract_params)'来分配'contract_params'。然后你可以简单地调用'@ contract.addendum.first.value'来获得你的第一个附录的价值。那是你在找什么? –

相关问题