2015-01-16 2 views
0

User 클래스에 has_many :through 관계 및 has_one 관계가있는 클래스 : Message 클래스. has_one 관계를 사용할 때 이상한 쿼리를 얻습니다.전화가 왔을 때 이상한 쿼리

나는 User에서 message_memberships까지의 has_many 관계로 Message 클래스를 보유하고 있습니다. Message의 각 인스턴스와 has_many through 관계를 통해 연결된 사용자는 작성자가 User입니다.

게으름 때문에 Message 인스턴스 (아래 스키마)의 creator_id 열에 제작자 ID를 기록하기 시작했습니다. 메시지가 생성 될 때마다 생성자 ID를 열에 추가합니다. 제작자를 언급 할 때마다 User.find(message.creator_id)이라고 부릅니다. 제작자 열과 사용자 사이에 링크를 만들려고했지만 올바른 구현을 찾을 수 없었습니다.

has_one 관계에있는 :creator_id 열을 참조하는 데 문제가 있습니다. 나는이

SELECT "users".* FROM "users" WHERE "users"."message_id" = ? AND "users"."id" = 'creator_id' LIMIT 1 [[nil, 26]] 

나는 완전히하지 오전이 같은 일이

Message.rb

has_one :creator, -> { where id: :creator_id }, class_name: 'User' 

하지만 message.creator를 찾을 때마다 호출되는 쿼리를 일하는 것이 가정 것 어디 있는지 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

그래서 범위를 제거하는 등 같은 외부 키를 추가 좋아요 범위 – apneadiving

+0

제거를 'has_one : creator, class_name : 'User', foreign_key : : id'는'SELECT "users"와 같은 질의를 생성합니다. * FROM "users"WH ERE "users". "id"=? LIMIT 1 [[ "id", 19]]'. 불행히도 넘버 19는 잘못되어 있으며 메시지를 제공합니다. primary_key – Deepak

답변

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 
+0

훌륭하게 나는이 구현을 정말로 좋아합니다. 나는 또한'has_one : creator, class_name : 'User', foreign_key : : id, primary_key : : creator_id'를'Message'에서 그리고'belongs_to : message'를'User'에서 간단하게 호출하여 message.creator를 호출 할 수있었습니다. 매우 혼란스럽고, 나는 당신의 구현에서 belongs_to가 외래 키를 보유하는 것을 선호한다. 기쁜 당신 – Deepak

+0

감사합니다 :) – apneadiving

관련 문제