0

该指南说 /lib 目录:

lib/ - 应用程序的扩展模块。

在某处我读到我可以将我的自定义电子邮件验证器类放在那里。但是那怎么用呢?如何要求它?

现在我这样做:

# File with validator: MyApp/lib/myEmailValidator.rb
class EmailValidator
    def self.validate(email) ...
end

# In my "create" method, MyApp/app/controllers/hello_controller.rb
def create
    require "myEmailValidator"
    @result = EmailValidator.validate(params[:email_from_form])
end

它有效,但有更好的方法来使用它吗?

4

1 回答 1

0

如果您目前只需要验证,比如电子邮件或其他任何东西,是的,有更好的做法。

  1. 这样的逻辑应该在模型而不是控制器中。如果您想要客户端验证,您可以使用 Javascript,但无法将它们放入控制器中。

  2. 对于模型中的验证,ActiveRecord 有大量的内置方法。你可以在这里阅读它们:http: //guides.rubyonrails.org/active_record_validations_callbacks.html。对于您的电子邮件验证的具体问题,可以通过这样的模式匹配来完成:

    validates :email, presence: true, format: {with: /EMAIL_PATTERN_REGEX/}
    

如果你需要的是关于如何扩展 Rails 核心。您的方法有效,但更好地使用 Module 或 Module 下的 Class 以添加额外的命名空间并避免名称冲突。

于 2013-04-16T15:28:50.153 回答