私はbelongs_toアサーションを持つフォームを持っています。ユーザーは自分のアドレスから選択するか、新しいものを作成できるようにしたいと思います。フォームはすなわち、Rails simple_formアソシエーションselect with createオプション
"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
トランザクション#new view
<%= 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