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'來獲得你的第一個附錄的價值。那是你在找什麼? –