所以,我的控制器中有这些行:
if Account.includes(:student).where(:email => account[:email]).any?
student=Account.find_by_email(account[:email]).student
@stream.students << student
else
#...
end
这里我假设它为条件生成两个db查询而不是一个,如果是,则生成内部。
答案 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
我在这里对你的模型和关联做了一些猜测,当然,这是一个返回学生的单一查询。