2017-09-19 12 views
1

がどのようにRailsのActiveRecordの上のRubyでこのSQLRailsは、内側が

select * from interview_questions as iq inner join (select * from interview_answers as iaa where iaa.case_id=6 and iaa.used='t') as ia where iq.id = ia.interview_question_id;

を書くために参加してクエリ? interview_questionsには多くのinterview_answersがあり、1対Nの関係です。私はこのSQLクエリが通常返すInterviewQuestionのリストを取得したいと思います。あなたはこのようにhas_many協会を使用する必要があなたのモデル間のN関係に1を持っていると仮定すると

+0

interview_questionsには多くのinterview_answersがありますか? interview_answersは多くのinterview_questionsに属していますか?まもなく、それはN対Nの関係ですか? –

+0

はい、interview_questionsには多くのinterview_answersがあります。これは1対Nの関係です。 –

+0

1つの答えは多くの質問に属しませんか? –

答えて

1

http://guides.rubyonrails.org/association_basics.html#the-has-many-association

レールをガイドが説明しています

has_manyの関連付けがAを示しています別のモデルとの1対多の接続。この関連付けは、belongs_to関連の「反対側」にあることがよくあります。この関連付けは、モデルの各インスタンスに別のモデルのインスタンスがゼロ以上あることを示します。たとえば、著者や書籍を含むアプリケーションでは、著者のモデルは次のように宣言することができます。

これを行うには、あなたはおそらくつもり必要性:

class interview_questions < ApplicationRecord 
    has_many :interview_answers 
end 

class interview_answers< ApplicationRecord 
    belongs_to :interview_questions 
end 

その後、あなたはへの移行を作成する必要がありますあなたのinterview_answersモデルにforeingキーを追加してください。

rails generate migration add_interview_questions_to_interview_answers interview_questions:references 

最後に、あなたが、これは単なる例であることを忘れないでください

interview_questions.first.interview_answer.where(case_id: 6).where(used: 't') 

のような関連のヘルパーを使用することができ、あなたはおそらくいくつかのマイナーなものを適応する必要があります。がんばろう!

1

@Gabriel Mesquitaが提案したように関連付けが行われた後、私は自分の仕事を完了するためにこれを必要としました。

InterviewQuestion.where(id: InterviewAnswer.where(case_id: params[:case_id], used: 't').pluck(:interview_question_id)) 

は、私が探していたRuby on Railsコードです。これは、現在のcase_idに対応するinterview_answerと、 't'に使用されるセットとに対応するinterview_questionsをすべて選択する。

+0

ニース!よくやった。 –

関連する問題