我花了最后三天在这里,我找不到任何答案。 我正在尝试学习Rails,我从一个看似非常简单的应用程序开始。
我有2个型号:
class Album < ActiveRecord::Base
has_and_belongs_to_many :users
attr_accessible :title
end
和
class User < ActiveRecord::Base
has_and_belongs_to_many :albums
attr_accessible :first_name, :last_name
end
我还创建了连接表
create_table "albums_users", :id => false
t.integer "album_id"
t.integer "user_id"
我的users / show.html.erb文件包含表单
<%= form_for([@user, @user.albums.build]) do |f| %>
发送此表单后,它会调用我的相册#create controller
def create
@user = User.find(params[:user_id])
@album = @user.albums.cre(params[:album])
@album.save
end
这会创建一个新专辑,但不会在联接表中创建该条目。
在查看提交表单时发送的参数哈希时,我有
Parameters: {"utf8"=>"✓", "commit"=>"Create Album", "user_id"=>"1", "authenticity_token"=>"XNCPLYWQRzjpuQfjqbR7XuhMjr5iRzjLiqXpqZ4spFo=", "album"=>{"event"=>"title"=>"My Title"}}
并且SQL请求不使用参数哈希
中的user_id值SQL(3.4ms)INSERT INTO“albums”(“title”,“user_id”)VALUES(?,?)[[“title”,“My Title”],[“user_id”,nil]]
我尝试使用user_id将hidden_field添加到我的表单中,但后来我收到此错误
Can't mass-assign protected attributes: user_id
有人能解释一下我的模特和我的协会有什么问题吗? 谢谢!
答案 0 :(得分:4)
直接在用户的相册中构建相册
@album = @user.album.create(params[:album])
答案 1 :(得分:0)
user_id不是params哈希的album-subhash的一部分,因此在保存相册时不可能添加用户。
一个简单的解决方案就是:
def create
@user = User.find(params[:user_id])
@album = @user.album.build(params[:album])
@album.save
end