我有一個belongs_to的ASSOCATION一種形式,我想用戶能夠無論是從他們的地址選擇,或創建一個新的。它打破當窗體上有,因爲在參數相互矛盾的信息驗證錯誤,即Rails的simple_form協會選擇以創建選項
"transaction" => { "address_id" = "25",
"address_attributes" => { "id" => "25" } }
我已經簡化相關文件:
Transaction.rb
class Transaction < ActiveRecord::Base
belongs_to :address
accepts_nested_attributes_for :address
end
Address.rb
class Address < ActiveRecord::Base
has_many :transactions
end
交易#新觀點
<%= simple_form_for @transaction do |f| %>
<%= f.association :address, :collection => current_user.addresses,
:include_blank => "Enter new address",
:value_method => :id %>
<%= f.simple_fields_for :address do |address_fields| %>
<%= address_fields.input :line1 %>
<%= address_fields.input :line2 %>
<%= address_fields.input :city %>
<%= address_fields.input :state %>
<%= address_fields.input :zip, :label => "Zip/Post Code" %>
<% end %>
<%= f.submit "Confirm" %>
<% end %>
交易#創建控制器
def create
trans_params = {}
if params[:transaction][:address_id].blank? && !params[:transaction][:address_attributes].nil?
trans_params[:address_attributes] = params[:transaction][:address_attributes]
elsif !params[:transaction][:address_id].nil?
trans_params[:address_id] = params[:transaction][:address_id]
end
@transaction = Transaction.new(trans_params)
end
當然有代碼缺少一大塊,但我認爲這是唯一的相關章節。我遇到的問題是,當你提交表單,並有驗證錯誤,simple_form自動添加<input id="transaction_address_attributes_id" name="transaction[address_attributes][id]" type="hidden" value="25">
到我的形式結束,導致參數發生衝突,並給予錯誤:
Couldn't find Address with ID=25 for Transaction with ID=
我想有是處理控制器中的參數的好方法。有任何想法嗎?我曾考慮使用JavaScript來移除並重新呈現「地址屬性」表單,但我寧願不依賴於JavaScript。
感謝您的信息。繭有一個後備與JavaScript禁用? – tom
我試了一下,但有幾個問題,例如...如果嵌套關聯中的字段驗證失敗,則在頁面重新加載時消失。 – tom
請在github上發佈問題,以便我可以進一步調查。 – nathanvda