有什么办法可以避免这种不必要的查询?

时间:2015-12-06 18:19:58

标签: ruby-on-rails

所以,我的控制器中有这些行:

 if Account.includes(:student).where(:email => account[:email]).any?
      student=Account.find_by_email(account[:email]).student
      @stream.students << student
      else
        #...
      end

这里我假设它为条件生成两个db查询而不是一个,如果是,则生成内部。

4 个答案:

答案 0 :(得分:2)

我要记忆并在iPad上打字,但我认为你可以这样做:

if student = Student.joins(:account).find_by(accounts: { email: account[:email] })
  ...
end

答案 1 :(得分:0)

更改为:

student = Account.includes(:student).where(:email => account[:email]).first
if student
# code

first返回第一条记录,如果nil将使if语句失败,则返回nil。

答案 2 :(得分:0)

我认为以下代码可以实现:

student_account = Account.includes(:student).where(:email => account[:email]).first
if !student_account.nil?
  student=student_account.student
  @stream.students << student
else
    #...
end

答案 3 :(得分:0)

我认为我希望重组为:

if student = Student.joins(:accounts).
                     where(:accounts => {:email => account[:email]}).
                     take
  @stream.students << student
  else
    #...
  end

我在这里对你的模型和关联做了一些猜测,当然,这是一个返回学生的单一查询。

相关问题