Ruby on rails 如何重写find_by方法,然后在activerecord中调用原始

Ruby on rails 如何重写find_by方法,然后在activerecord中调用原始,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,我想在我的模型中覆盖find_by_方法。。。 然后在它里面我想调用原始+一些附加代码 class User < Activerecord::Base def self.find_by_email(email) binding.pry super.find_by_email(email) || find_by_social_identities_email(email) end ... end class用户

我想在我的模型中覆盖find_by_方法。。。 然后在它里面我想调用原始+一些附加代码

class User < Activerecord::Base
  def self.find_by_email(email)
    binding.pry
    super.find_by_email(email) || find_by_social_identities_email(email)
  end
...

end
class用户

欢迎任何想法???

最后我这样做了:

class User < Activerecord::Base
  def self.find_by_email(email)
    super.find_by('email = :email', {email: email}) || find_by_social_identities_email(email)
  end
  ...
end
class用户
最后我这样做了:

class User < Activerecord::Base
  def self.find_by_email(email)
    super.find_by('email = :email', {email: email}) || find_by_social_identities_email(email)
  end
  ...
end
class用户
对于Rails 5,我需要使用
self
而不是
super
。使其成为:

class用户
对于Rails 5,我需要使用
self
而不是
super
。使其成为:

class用户
在定义中,您可以使用
.where(:email=>email)。首先使用
方法。使用Ruby Racer的方法。动态的“find_by_*”方法使用了一些技巧,包括
method_missing
,因此它不像常规方法那样工作。这可能就是为什么在
super
上调用它失败的原因。我意识到通过查找。。。将首次创建通过电子邮件查找的方法,以便。。。在它里面,我称之为find_by('email=:email',{email:email}),这几乎是Ruby Racer的建议…在定义中,你可以使用
。其中(:email=>email)。首先是
方法。使用Ruby Racer的方法。动态的“find_by_*”方法使用了一些技巧,包括
method_missing
,因此它不像常规方法那样工作。这可能就是为什么在
super
上调用它失败的原因。我意识到通过查找。。。将首次创建通过电子邮件查找的方法,以便。。。在它里面我称之为find_by('email=:email',{email:email}),这几乎是Ruby Racer的提议……我相信这可以简化为
find_by(email:email)| | find_by_社会身份_email(email)
我相信这可以简化为
find_by(email:email)| | find_by_社会身份_email(email)