我如何参考RoR 5中的模块实例方法中的模型属性

我想将我的downcase_email方法从我的User类中移出,因为我有多个需要使其电子邮件缩减的类。我不确定这是否是正确的方法,但我创建了一个模块并将其移入其中。我如何参考RoR 5中的模块实例方法" title="实例方法">实例方法中的模型属性

class User < ApplicationRecord 

include ModelUtilities

before_save :downcase_email

# downcase_email was previously here

#

# def downcase_email

# self.email = email.downcase

# end

end

文件中的lib/model_utilities.rb

module ModelUtilities 

def downcase_email

self.email = email.downcase

end

end

当我运行代码,我得到以下错误:

NoMethodError (undefined method `downcase' for nil:NilClass): 

lib/model_utilities.rb:6:in `downcase_email'

任何帮助,将不胜感激!

回答:

你正在做的一切正确。但是当电子邮件本身是空的/零的情况呢?然后你会得到 '的零级未定义的方法downcase'

所以只要编辑您这样的代码

nil.try(:something) wont throw error - its like mini exception handler

def downcase_email 

self.email = email.try(:downcase)

end

回答:

这是一个很好的常用方法,但Rails提出了这种情况的担忧。 http://api.rubyonrails.org/v5.1/classes/ActiveSupport/Concern.html

在你的情况下,代码将是:

# file in models/concerns/model_utilities.rb 

module ModelUtilities

extend ActiveSupport::Concern

included do

before_validation :downcase_email

end

def downcase_email

email.downcase!

end

end

# include your concern

class User < ApplicationRecord

include ModelUtilities

end

before_validation可以移动到担忧。

以上是 我如何参考RoR 5中的模块实例方法中的模型属性 的全部内容, 来源链接: utcz.com/qa/257436.html

回到顶部