【问题标题】:Rails 3 - join table not updated when creating new HABTM associationRails 3 - 创建新的 HABTM 关联时未更新连接表
【发布时间】: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


【解决方案1】:
  1. has_many 关联使用复数形式
  2. 直接在用户相册中构建相册

    @album = @user.album.create(params[:album])
    

【讨论】:

  • 好的,使用复数作为关联解决了这个问题。谢谢!
【解决方案2】:

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

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

def create
    @user = User.find(params[:user_id])
    @album = @user.album.build(params[:album])  
    @album.save
end 

【讨论】:

  • user_id 仍然不是专辑子哈希的一部分Parameters: {"authenticity_token"=&gt;"XNCPLYWQRzjpuQfjqbR7XuhMjr5iRzjLiqXpqZ4spFo=", "commit"=&gt;"Create Album", "album"=&gt;{""title"=&gt;"My Title"}, "user_id"=&gt;"1", "utf8"=&gt;"✓"}
猜你喜欢
  • 1970-01-01
  • 2013-07-07
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多