ale*_*nco 4 ruby-on-rails associations
我有一个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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
post.rb:
has_many :bookmarks, :dependent => :destroy
has_many :bookmarkers, :through => :bookmarks
Run Code Online (Sandbox Code Playgroud)
user.rb:
has_many :bookmarks, :dependent => :destroy
has_many :bookmarked_posts, :through => :bookmarks, source: :bookmarked
Run Code Online (Sandbox Code Playgroud)
我试着测试终端中的关联,但我明白了:
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
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢?
小智 6
你没有指定foreign_key,异常清楚地说
no such column: bookmarks.user_id
Run Code Online (Sandbox Code Playgroud)
加上
has_many :bookmarks, :foreign_key => 'bookmarker_id'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |