Ruby on rails 如何重写find_by方法,然后在activerecord中调用原始
我想在我的模型中覆盖find_by_方法。。。 然后在它里面我想调用原始+一些附加代码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用户
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)