ruby-on-rails - 如何在 ruby​​ 中对我的模型进行全局验证(仅接受字母数字)

标签 ruby-on-rails ruby validation

我目前是 Ruby on Rails 的新手,我有一个名为 Rails admin 的 gem。我希望验证不可重复,我希望它保存在一种方法中并将其设置为全局,以便在我的模型中我可以调用验证格式。

我在应用程序 Controller 中添加了一个 def,并在其中将其声明为全局的,但是当我输入特殊字符时,它将被添加。

注意:我的验证只允许使用字母数字或下划线..

预期输出:除非输入是字母数字或下划线,否则不会添加

问题:我的全局变量错了吗?我怎样才能创建一个全局变量以便我只调用它

型号

class ActivityType < ApplicationRecord
  has_many :activities

  validates :name, presence: true, length: { maximum: 20 },
                           :uniqueness => true,
                           format: { with: /\A[\w\_]+\z/ }
  validates :description, presence: true,
                         format: { with: /\A[\w]+\z/ }

end

正则表达式验证

 module RegexValidations
  def self.alphanumeric_underscore
    { with: /\A[\w\_]+\z/ }
  end
end

最佳答案

  • 在模型级别对其各自的属性进行验证。
  • 在 application_controller 中定义方法并不会使其成为全局的,但可以供从它继承的所有 Controller 访问。

您的模型验证validates应该足以验证列中字符串的格式。

编辑/即兴创作:

如果您想让正则表达式干燥/不为每个模型重复。在您的 lib 文件夹中创建一个模块:

module RegexValidations
  def self.alphanumeric_underscore
    { with: /\A[\w\_]+\z/ }
  end
end

在你的模型中包含它并说:

include RegexValidations
validates :description, presence: true, format: RegexValidations.alphanumeric_underscore

通过这种方式,您可以在一个文件中编写多个正则表达式,并在每个模型中使用它,保持干燥。 PS:不幸的是我无法测试它..但它应该可以工作。如果您遇到任何错误,请告诉我。

关于ruby-on-rails - 如何在 ruby​​ 中对我的模型进行全局验证(仅接受字母数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43751614/

相关文章:

php - Symfony 2 登录验证

javascript - 使用JS检查表单字段中的字符串

ruby-on-rails - Rails 测试和 Mocha : How to stub specific model - conditional any_instance?

ruby-on-rails - Elasticsearch Service (AWS) on Rails - 超时

javascript - Kendo UI,如何在 kendo 网格单元格上手动调用 validate()

ruby - 验证一系列消息被发送到不同的对象/类

ruby-on-rails - RVM 不更改 Mac 上的 Ruby 版本

ruby-on-rails - 是否可以在公用文件夹中的 index.html 中呈现部分内容?

ruby-on-rails - 如何使用元编程进行 DRY?

ruby-on-rails - 如何在 Rails 中使用验证包含