我目前是 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/