[英]Rails 4 Nested form has_many through association and database
所以我有三個模型客戶端,地址和地址信息。 但是,當我為address和address_info創建一個嵌套表單時,我得到的行基本上是我想要的兩倍。 前三行將具有綁定的addresstype和clientid,其他三行將具有與其綁定的clientid和addressid。 這是輸出示例:
如您所見,這些行沒有與該行關聯的地址和客戶端ID。 我不確定該如何解決。
這是我的模型:
#client model
has_many :address_infos
has_many :addresses, through: :address_infos
accepts_nested_attributes_for :addresses, :address_infos, reject_if: :all_blank, allow_destroy: true
#addressinfo model
belongs_to :client
belongs_to :address
#address model
has_many :address_infos
has_many :clients, through: :address_infos
這是我的客戶控制器:
def new
@client = Client.new
@client.address_infos.build
@client.addresses.build
end
def create
@client = Client.new(client_params)
end
private
def client_params
params.require(:client).permit(:firstname, :middlename, :lastname,
addresses_attributes: [:street, :city, :state, :zipcode],
address_infos_attributes: [:ownorrent, :addresstype, :yearsofresidency])
end
end
這是我的觀點,請注意,對於郵件和以前的地址,我也沒有嵌套的表格:
<%= form_for(@client) do |f| %>
<%= f.fields_for :addresses do |addresses_form| %>
<!-- misc. code -->
<%= f.fields_for :address_infos do |addressinfo_form| %>
<%= addressinfo_form.label :ownorrent, "Own", :value => "Own" %>
<%= addressinfo_form.radio_button :ownorrent, :own %>
<%= addressinfo_form.label :ownorrent, "Rent", :value => "Rent" %>
<%= addressinfo_form.radio_button :ownorrent, :rent %>
<%= addressinfo_form.text_field :yearsofresidency, class:"form-control", id:"inputfield", placeholder:"Years" %>
<%= addressinfo_form.text_field :addresstype,:value => "presentaddress" %>
<% end %>
<% end %>
更新因此,在執行了建議的操作之后,我最終在數據庫中添加了該地址:我嘗試添加的地址是123 Fake St的地址。其他內容直接植入了種子。 address_id仍然與其余內容不符。 我還更新了當前模型。
在保存到數據庫之前,應該控制嵌套屬性。 使用reject_if
或allow_blank
選項可防止和銷毀空白記錄。
accepts_nested_attributes_for :addresses, :address_infos, reject_if: :all_blank, allow_destroy: true
有關控制參數的更多選項,請訪問鏈接http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.