等效查询替换find_by的位置

时间:2016-10-21 10:50:25

标签: ruby-on-rails activerecord

Home.where(code: "x123").where.not(state_id: 1)

如何使用等效查询,而不是使用"其中"我想使用find_by。

2 个答案:

答案 0 :(得分:1)

find_by返回单个记录(首先匹配指定的条件),因此没有办法(和感觉)做你想做的事。

修改

  

肯定!但我只想要一个对象!

以下查询会执行此操作(它将搜索代码123和除state_id之外的任何1。并且它将返回与此条件匹配的第一条记录):

Home.find_by(code: '123', state_id: State.ids - [1])

答案 1 :(得分:0)

如果目标是返回单个对象,则只需使用first

Home.where(code: "x123").where.not(state_id: 1).first

如果您要使用find_by的原因是因为您希望丢失的记录引发ActiveRecord::RecordNotFound,那么您可以改为使用first!,这样就可以了。