我有Post
和User
模型。我尝试添加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
可能是什么问题?
答案 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'