3

我在过去的三天里一直在做这个,我在任何地方都找不到任何答案。我正在尝试学习 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 请求不使用参数哈希中的 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

有人可以解释一下我的模型和关联有什么问题吗?谢谢!

4

2 回答 2

4
  1. 对 has_many 关联使用复数
  2. 直接在用户的相册中构建相册

    @album = @user.album.create(params[:album])
    
于 2012-10-03T08:02:45.863 回答
0

user_id 不是 params 哈希的专辑子哈希的一部分,因此在保存专辑时不可能添加用户。

一个简单的解决方案是这样的:

def create
    @user = User.find(params[:user_id])
    @album = @user.album.build(params[:album])  
    @album.save
end 
于 2012-10-03T07:53:01.343 回答