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
크게이 설치 시도
그래서 범위를 제거하는 등 같은 외부 키를 추가 좋아요 범위 – apneadiving
제거를 '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