Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在ruby中对我的模型进行全局验证(只接受字母数字)_Ruby On Rails_Ruby_Validation - Fatal编程技术网

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

Ruby on rails 如何在ruby中对我的模型进行全局验证(只接受字母数字),ruby-on-rails,ruby,validation,Ruby On Rails,Ruby,Validation,我目前是RubyonRails的新手,我有一个名为rails管理员的gem。我希望验证不可重复,我希望它保存在一个方法中并使其全局化,以便在我的模型中调用验证格式 我在我的应用程序控制器中添加了一个def,并在其中声明为全局,但当我键入特殊字符时,它将被添加 注意:我的验证只允许使用字母数字或下划线 预期输出:除非输入为字母数字或下划线,否则不会添加 问题:我的全局变量错了吗?我怎样才能创建一个全局变量,这样我就可以调用它了 型号 class ActivityType < Applicat

我目前是RubyonRails的新手,我有一个名为rails管理员的gem。我希望验证不可重复,我希望它保存在一个方法中并使其全局化,以便在我的模型中调用验证格式

我在我的应用程序控制器中添加了一个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
  • 在模型级别对它们各自的属性进行验证
  • 在application_controller中定义方法并不会使其成为全局的,但所有继承它的控制器都可以访问它
您的模型验证
验证
应该足以验证列中字符串的格式

编辑/即兴创作:

如果要使正则表达式干燥/不重复每个模型。在
lib
文件夹中创建一个模块,如:

module RegexValidations
  def self.alphanumeric_underscore
    { with: /\A[\w\_]+\z/ }
  end
end
在你的模型中包括它并说:

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

如果您使用了
regex\u validations.rb
,您不需要也包括它。我创建了一个名为RegexValidations.rb的新文件,对吗?是的,创建一个名为
regex\u validations.rb
的文件,也许@Sergio Tulentsev是正确的。尝试不首先包含它。@Angel,不,创建
regex\u validations.rb
并将其放入
/lib
文件夹。然后按照我的回答。在你的模型上写这行,上面是验证
包括RegexValidations
include RegexValidations
validates :description, presence: true, format: RegexValidations.alphanumeric_underscore