按ID或按对象查找

时间:2017-01-19 15:02:25

标签: ruby-on-rails activerecord

通过整个对象,可以看到实现模型where在外键中搜索的代码。例如,搜索用户练习:

Exercise.where(user: user)

另一种常用方法是:

Exercise.where(user_id: user.id)

签入控制台日志,两个查询按用户ID查询,但两者之间有“最推荐”的方式?如果是的话,为什么:更优雅,更具性能?

2 个答案:

答案 0 :(得分:2)

我会选择第一个

Exercise.where(user: user)

主要是风格偏好,但如果每个用户都在练习中变成多态,那么这种方法可以在没有任何变化的情况下工作,而第二个选项则需要更改为第一个选项。

基准测试我很快就没有表现出真正的性能差异。

答案 1 :(得分:-2)

Exercise.where('user_id = ?', user.id)

我不确定我是否正确理解了您的问题,但如果您正在寻找其他查询方式或者最佳实践,那么上面是在Rails中查询的正确方法。

它被接受为最佳实践的原因是因为它的Rails安全对策

Rails Guides: Array Conditions

Rails Security Guides: SQL Injections: Countermeasures

所以回答你的问题,是的,以这种方式查询背后有充分的理由。