没有这样的列:以下多对多关联中的书签

时间:2012-12-24 13:49:07

标签: ruby-on-rails associations

我有PostUser模型。我尝试添加Bookmark模式,以便用户可以为帖子添加书签。我正在使用join model

schema.rb:

create_table "bookmarks", :force => true do |t|
  t.integer  "bookmarker_id"
  t.integer  "bookmarked_id"
  t.datetime "created_at",    :null => false
  t.datetime "updated_at",    :null => false
end

bookmark.rb:

class Bookmark < ActiveRecord::Base
  attr_accessible :bookmarked_id

  belongs_to :bookmarker, class_name: "User"
  belongs_to :bookmarked, class_name: "Post"

  validates :bookmarker_id, presence: true
  validates :bookmarked_id, presence: true
end

post.rb:

has_many :bookmarks, :dependent => :destroy
has_many :bookmarkers, :through => :bookmarks

user.rb:

has_many :bookmarks, :dependent => :destroy
has_many :bookmarked_posts, :through => :bookmarks, source: :bookmarked 

我试图测试终端中的关联,但我得到了这个:

1.9.3-p0 :007 > user.bookmarks
  Bookmark Load (0.4ms)  SELECT "bookmarks".* FROM "bookmarks" WHERE "bookmarks"."user_id" = 1
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: bookmarks.user_id: SELECT "bookmarks".* FROM "bookmarks"  WHERE "bookmarks"."user_id" = 1

可能是什么问题?

2 个答案:

答案 0 :(得分:6)

你没有指定foreign_key,例外清楚地说

no such column: bookmarks.user_id

只需添加

has_many :bookmarks, :foreign_key => 'bookmarker_id'

答案 1 :(得分:1)

没有外键书签

按照以下步骤操作;

rails g migration add_user_id_to_bookmarks user_id:integer

然后做

has_many :bookmarks, :foreign_key => 'bookmarker_id'