Rails中的高级查找

时间:2010-04-05 15:45:58

标签: ruby-on-rails activerecord

除了最明显的事情之外,我真的很喜欢Rails的发现者。当事情变得比

更先进时,我总是求助于SQL
Model.find(:all, :conditions => ['field>? and field<? and id in (select id from table)', 1,2])

我有这个方法:

def self.get_first_validation_answer(id)
a=find_by_sql("
  select answers.*, answers_registrations.answer_text
  from answers_registrations left join answers on answers_registrations.answer_id=answers.id
  where 
    (answers_registrations.question_id in (select id from questions where validation_question=true)) 
    and
    (sale_registration_id=#{id})
  limit 1
").first

a.answer_text || a.text if a
end

有人可以创建一个让我得到我想要的发现方法吗?

此致

雅各

3 个答案:

答案 0 :(得分:4)

class AnswersRegistration < ActiveRecord::Base
  has_many :answers
end

id = 123
the_reg = AnswersRegistration.first(
  :joins => :answers, 
  :conditions => '(question_id in (select id from questions where validation_question = true)) and (sale_registration_id = ?)', id)

(未测试的)

答案 1 :(得分:0)

如果满足您的需要,只需使用binarylogic的Searchlogic gem。 在这里:http://github.com/binarylogic/searchlogic

答案 2 :(得分:0)

有时AR会在复杂的嵌套条件下窒息,但理论上你应该能够做到这一点:

AnswersRegistration.first(:conditions => { :question => { :validation_question => true },
                                           :sale_registration_id => id },
                          :include => :answer)