私にはユーザーがいます。ユーザーには多くのクライアントと連絡先があります。クライアントにも多くの連絡先があります (連絡先はユーザーとクライアントの両方に属します)。
クライアント ビューで、新しいクライアントを作成し、同じフォームでユーザーがそのクライアントの最初の連絡先を作成できるようにしたいと考えています。最初は、ネストされた属性を使用するとうまくいくと思っていましたが、いくつかの問題が発生しています。client_controller#create で @client を保存しようとすると、連絡先の user_id を空白にすることはできず、client_id を空白にすることもできないため、保存できません。これが私がこれまでに持っているものです:
クライアント コントローラー インデックス (新しいクライアント フォームがある場所):
def index
@clients = current_user.clients
@client = Client.new
@contact = @client.contacts.build
respond_to do |format|
format.html # index.html.erb
format.json { render json: @clients }
end
end
および create メソッド:
def create
@client = current_user.clients.new(params[:client])
respond_to do |format|
if @client.save
そしてフォーム:
= form_for(@client) do |f|
= f.fields_for(:contacts) do |contact|
しかし、保存するときはclient_idとuser_idが必要です...しかし、ネストされた属性を使用してそれらを実際に設定することはできません。どうすればこれを達成できますか? これを行うより良い方法はありますか?ここに私のパラメータがあります:
{"name"=>"asdf", "contacts_attributes"=>{"0"=>{"name"=>"asdf", "email"=>"asdf@gmail.com"}}}
欠落している値を直接contacts_attributesに追加しようとしましたが、@clientがまだ保存されていないため、client.idをcontactに割り当てることができません:
params[:client][:contacts_attributes]["0"].merge!(:user_id => current_user.id)
params[:client][:contacts_attributes]["0"].merge!(:client_id => @client.id)
user_id が設定されていても...ユーザーが見つからないと言われます。