Rails SQL查询与find

Nav*_*ave 7 sql ruby-on-rails find

我希望使用find在rails控制器中编写此SQL查询:

select id,name from questions
where id not in (select question_id from levels_questions where level_id=15)
Run Code Online (Sandbox Code Playgroud)

我该怎么做?我正在使用Rails框架和MySQL.提前致谢.

jos*_*hng 28

Question.find_all_by_sql('select id,name from questions where id not in (select question_id from levels_questions where level_id=15)')
Run Code Online (Sandbox Code Playgroud)

这无疑是非ActiveRecord-ish,但我发现使用AR宏时,诸如此类的复杂查询往往不够清晰/高效.如果您已经构建了SQL,那么您也可以使用它.

一些建议:将此查找调用封装在INSIDE Question类中的方法中,以隐藏控制器/视图中的详细信息,并考虑可能更高效的其他SQL结构(例如,其中levels_questions.question_id为null的OUTER JOIN)


Rya*_*roi 21

简单方法:

ids = LevelsQuestion.all(:select => "question_id", 
        :conditions => "level_id = 15").collect(&:question_id)
Question.all(:select => "id, name", :conditions => ["id not in (?)", ids])
Run Code Online (Sandbox Code Playgroud)

一枪:

Question.all(:select => "id, name",
:conditions => ["id not in (select question_id from levels_questions where level_id=15)"])
Run Code Online (Sandbox Code Playgroud)