Rails 3 - 在创建新的HABTM关联时未更新连接表

时间:2012-10-03 07:06:26

标签: ruby-on-rails ruby-on-rails-3 has-and-belongs-to-many jointable

我花了最后三天在这里,我找不到任何答案。 我正在尝试学习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

有人能解释一下我的模特和我的协会有什么问题吗? 谢谢!

2 个答案:

答案 0 :(得分:4)

  1. 对has_many associations
  2. 使用复数形式
  3. 直接在用户的相册中构建相册

    @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