我有用户,用户有很多客户端和联系人。客户也有很多联系人(联系人属于用户和客户)。嵌套表格无法保存client_id和user_id
在我的客户端视图中,我想创建一个新的客户端,并在同一个表单上允许用户为该客户端创建第一个联系人。最初,我认为使用嵌套属性可以做到这一点,但我遇到了一些问题。当我在clients_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
和创建方法:
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 ...但我不能真正设置使用嵌套的a ttributes。我怎么能做到这一点?有没有更好的方法来做到这一点?这里是我的PARAMS:
{"name"=>"asdf", "contacts_attributes"=>{"0"=>{"name"=>"asdf", "email"=>"[email protected]"}}}
我只是尝试添加缺少的值直接进入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,它仍然表示用户缺失。
如果我不想通过用户模型执行此操作,该怎么办?我不是每次都创建一个新用户......只有一个新的客户和联系人。 – 2013-04-20 19:31:06
马修,我已经更新了答案。这是否有用? – gmile 2013-04-20 19:40:51
嗯..通过@user模型绝对必要吗?这对我来说似乎是错误的,因为联系与客户关系更密切(我认为?)。有没有用户的方式?特别是因为视图和路线现在都在客户端。 – 2013-04-21 00:51:22