覆盖ActiveRecord动态查找器

时间:2014-12-16 17:30:25

标签: ruby-on-rails activerecord

我有一个依赖find_by_id的外部库,但我的主键是uuidid列不存在。

有没有办法让Model.find_by_id别名为Model.find_by_uuid,甚至只有Model.find

2 个答案:

答案 0 :(得分:2)

一般情况下,动态find_by方法不受欢迎,首选Model.find_by(uuid: '123')

但在你的情况下,听起来你可以像这样覆盖主键。

class Model
  self.primary_key = 'uuid'
end

这样您就可以Model.find('1234-1234-1234-1234')

我仍然认为这不适用于find_by_id,因为这是指定要查看的列名称。如果您真的依赖于此外部库,则可以覆盖find_by_id

class Model
  def self.find_by_id(id)
    find_by uuid: id
  end
end

答案 1 :(得分:0)

确实没有必要得到幻想,修改或覆盖任何东西

Model.find_by (uuid: client_id)

Model.where(uuid: client_id).take

将满足您的查询需求。 Active record querying documentation