问题:Message
类与has_many :through
类有has_one
关系且User
关系。当我尝试使用has_one关系时获取一个奇怪的查询。
我有一个Message
类,与User
到message_memberships
有一个has_many关系。 Message
的每个实例以及通过has_many through
关系与其关联的用户都有一个User
的创建者。
由于懒惰,我开始在creator_id
实例的Message
列中记录创建者ID(下面的架构)。每次创建消息时,我都会将创建者ID添加到列中。每当我想引用创作者时,我都会调用User.find(message.creator_id)
。我正在寻找创建者列和用户之间的链接,但我找不到正确的实现。
我遇到的问题是引用:creator_id
关系中的has_one
列。我会假设这样的事情会起作用
Message.rb
has_one :creator, -> { where id: :creator_id }, class_name: 'User'
但是每当我查找message.creator时调用的查询就是这个
SELECT "users".* FROM "users" WHERE "users"."message_id" = ? AND "users"."id" = 'creator_id' LIMIT 1 [[nil, 26]]
我不完全确定WHERE "users"."message_id" = ?
的位置。没有它,看起来查询会很好。我不知道如何阻止它发生。
模式
create_table "messages", force: true do |t|
t.string "title"
t.string "contents"
t.datetime "created_at"
t.datetime "updated_at"
t.string "token"
t.integer "creator_id"
t.string "link"
end
非常感谢任何帮助
答案 0 :(得分:1)
尝试此设置:
class Message
belongs_to :creator, class_name: '::User', foreign_key: :creator_id
end
class User
has_many :authored_messages, class_name: '::Message', inverse_of: :creator
end