使用和不使用bang覆盖find_by方法

时间:2015-09-07 16:13:12

标签: ruby-on-rails

使用Rails 4.这是我的代码:

class Item < ActiveRecord::Base
  def self.find_by_uid(uid)
    where("BINARY uid = ?", uid).first
  end

  def self.find_by_uid!(uid)
    where("BINARY uid = ?", uid).first!
  end
end
当找不到记录时,

find_by_uid!在控制器中用于引发ActiveRecord::RecordNotFound,并且find_by_uid在内部使用(因此不会引发异常)。

有更好的方法对此进行编码吗?

1 个答案:

答案 0 :(得分:0)

您可以通过创建范围来干燥方法:

class Item < ActiveRecord::Base

  scope :by_uid, ->(uid) { where("BINARY uid = ?", uid) }

  def self.find_by_uid(uid)
    by_uid(uid).first
  end

  def self.find_by_uid!(uid)
    by_uid(uid).first!
  end
end