Tôi đang cố thực hiện truy vấn trong Rails bằng ActiveRecord chỉ định một số điều kiện trên bảng đã nối. Và tôi dường như không thể có được nó để làm việc, mặc dù tôi làm theo các ví dụ từ đây:Cách xác định các điều kiện trên bảng đã nối trong đường ray
http://guides.rubyonrails.org/active_record_querying.html#specifying-conditions-on-the-joined-tables
Từ hướng dẫn trên guides.rubyonrails.org:
Client.joins(:orders).where(:orders => {:created_at => time_range})
schema cơ sở dữ liệu của tôi trông như thế này, với một số điểm, bảng trình và bảng nhiệm vụ:
create_table "scores", :force => true do |t|
t.integer "value"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "scores", ["user_id"], :name => "index_scores_on_user_id"
create_table "submissions", :force => true do |t|
t.integer "user_id"
t.integer "task_id"
t.integer "score_id"
t.datetime "completed_at"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "submissions", ["score_id"], :name => "index_submissions_on_score_id"
add_index "submissions", ["task_id"], :name => "index_submissions_on_task_id"
add_index "submissions", ["user_id"], :name => "index_submissions_on_user_id"
create_table "tasks", :force => true do |t|
t.integer "episode_id"
t.integer "score"
t.string "key"
t.datetime "created_at"
t.datetime "updated_at"
end
Vì vậy, tôi muốn thực hiện truy vấn nơi tôi có thể tìm thấy tất cả "điểm" có liên quan đến một nhiệm vụ không đáng kể. Gửi thuộc về nhiệm vụ và điểm số.
truy vấn của tôi bây giờ trông như thế này:
Score.joins(:submission).where(:submission => {:task_id => 1})
này tạo ra cú pháp sau:
SELECT "scores".* FROM "scores" INNER JOIN "submissions" ON "submissions"."score_id" = "scores"."id" WHERE "submission"."task_id" = 1
nào tạo ra được lỗi sau:
SQLite3::SQLException: no such column: submission.task_id
Nhưng có một cột submission.task_id
, bạn có thể thấy trong lược đồ db. Và tôi có thể làm điều này thành công:
SELECT "submissions".* FROM "submissions" WHERE "submissions"."task_id" = 1
Thực tế, theo đoạn mã hướng dẫn Rails được đăng, vì vậy biểu tượng 'tham gia'. – Chowlett
Hoàn toàn chính xác của bạn! Chỉ cần tìm ra điều đó. Darn. – espenhogbakk
@Chowlett, đó là vì họ có mối quan hệ Nhiều đến Nhiều, tôi chỉ có One to One, has_one, instad of has_many. Đó cũng là lý do tại sao tôi không nắm bắt số nhiều trong tham chiếu đến tên bảng tôi nghĩ. – espenhogbakk