ジョイントテーブルの条件を指定するActiveRecordでRailsでクエリを実行しようとしています。そして、私はここからの例に従っていても、それが仕事を得るように見えることはできません。レールでジョインテーブルの条件を指定する方法
http://guides.rubyonrails.org/active_record_querying.html#specifying-conditions-on-the-joined-tables
guides.rubyonrails.org上のガイドから:
Client.joins(:orders).where(:orders => {:created_at => time_range})
私のデータベーススキーマスコア、提出とタスクテーブルで、次のようになります。
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
だから私は、私はspesificタスクに関係を持っているすべての「スコア」を見つけることができますクエリを実行します。投稿はタスクやスコアに属します。
私のクエリは次のようになります。
Score.joins(:submission).where(:submission => {:task_id => 1})
これは、次の構文を生成します。
次のエラー発生しSELECT "scores".* FROM "scores" INNER JOIN "submissions" ON "submissions"."score_id" = "scores"."id" WHERE "submission"."task_id" = 1
:
SQLite3::SQLException: no such column: submission.task_id
をしかし、列submission.task_id
がありますこれはdbスキーマで見ることができます。そして、私は正常にこの操作を行うことができます。
SELECT "submissions".* FROM "submissions" WHERE "submissions"."task_id" = 1
実際には、Railsのガイドスニペットに掲載されている通り、 'join 'シンボルもそうです。 – Chowlett
あなたはまったく正しい!それだけで私の自己を発見した。ダン。 – espenhogbakk
@Chowlettは、多対多の関係を持っているため、私は1対1、has_one、has_manyのinstadしか持っていません。それは私が思うテーブル名を参考にして複数形をキャッチしなかった理由です。 – espenhogbakk