我有用户,用户有很多客户和联系人。客户也有许多联系人(一个联系人属于用户和客户)。
在我的客户视图中,我想创建一个新客户并在同一个表单上允许用户为该客户创建第一个联系人。最初,我认为使用嵌套属性可以解决问题,但我遇到了一些问题。当我在clients_controller#create 中保存@client 时,我无法保存,因为user_id 不能为空且client_id 不能为Contact 的空白。这是我到目前为止所拥有的:
客户端控制器索引(新客户端表单所在的位置):
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
和创建方法:
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 分配给联系人:
params[:client][:contacts_attributes]["0"].merge!(:user_id => current_user.id)
params[:client][:contacts_attributes]["0"].merge!(:client_id => @client.id)
即使设置了 user_id ......它仍然说用户丢失。