我有两个类,User和Contact。用户有很多联系人,联系人属于用户。在用户的节目视图中,我有:
<%= link_to 'Add Contact', :controller => "contacts", :action => "new", :user => @user.id %>
然后,在联系人的控制器中,在新操作下,我有:
@user = User.find(params[:user])
@contact = Contact.new
@contact.user = @user
当新的联系表单呈现时,它具有#&lt; User:0x4c52940&gt;在用户字段中已经存在。但是,当我提交表单时,我收到错误:用户(#39276468)预期,得到字符串(#20116704)。
问题是,当调用create时,Ruby会获取表单中的所有内容并覆盖新Contact中的字段。那么:如何更改表单以删除用户字段,以便用户不会被字符串覆盖?
编辑: 我的联系人的new.html.erb有这个:
<%= render 'form' %>
<%= link_to 'Back', contacts_path %>
联系人的控制人员:
def new
@user = User.find(params[:user])
@contact = Contact.new
@contact.user = @user
respond_to do |format|
format.html # new.html.erb
format.json { render json: @contact }
end
end
和
def create
@contact = Contact.new(params[:contact])
respond_to do |format|
if @contact.save
format.html { redirect_to @contact, notice: 'Contact was successfully created.' }
format.json { render json: @contact, status: :created, location: @contact }
else
format.html { render action: "new" }
format.json { render json: @contact.errors, status: :unprocessable_entity }
end
end
end
答案 0 :(得分:1)
我相信你滥用控制器的创建动作。基本上它的内容应该是这样的
def create
@user = User.find(params[:user_id])
contact = @user.contacts.build(params[:contact])
if contact.save
flash[:alert] = 'New contact is created'
redirect_to contacts_path(contact)
else
flash.now[:error' = 'Error creating contract'
render :action => :new
end
end
上一个答案的+1 - 显示控制器和新的表单代码