【发布时间】:2012-09-24 02:01:50
【问题描述】:
过去三天我一直在研究这个问题,但在任何地方都找不到任何答案。 我正在尝试学习 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 控制器
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请求没有使用参数hash中的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
谁能解释我的模型和关联有什么问题? 谢谢!
【问题讨论】:
-
您确定要使用 HABTM 吗?如果是这样,您通常不会将
accepts_nested_attributes_for与 HABTM 关系一起使用... -
看起来您的相册模型也有一个 user_id 属性。检查你的 schema.db 文件,它应该在那里吗?
-
has_many 关系会更容易处理吗?我的相册模型中有一个 user_id 属性。不应该在那里吗?
-
好吧,这取决于,实际的关系是什么?一张专辑有很多用户吗?一个用户有很多专辑吗?
-
是的,一个相册可以有很多用户,一个用户可以有很多相册。我从我的相册模型中删除了 user_id 属性,结果相同...
标签: ruby-on-rails ruby-on-rails-3 has-and-belongs-to-many jointable