【问题标题】:creating a new column datatype in rails在 Rails 中创建新的列数据类型
【发布时间】:2017-05-13 17:58:33
【问题描述】:

我可能没有寻找合适的词来得到答案,所以你是我最后的机会。

我希望在 rails 中创建一个新的数据类型,例如: t.israeli_id

它会通过自定义的验证方法,并根据它添加错误。

我将在多个表中使用此数据类型,因此将其设为字符串,并在每个 model.rb 中传递验证函数将非常不 DRY。

我正在使用 Postgresql,以防万一。

【问题讨论】:

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 sqldatatypes


【解决方案1】:

不,您以错误的方式处理此问题。数据库对您的应用程序逻辑一无所知,它只能进行基本验证(不能为 null 等)。

所有特定于应用程序的验证、错误消息和其他内容 - 都会进入您的模型。如果您在多个模型中需要它并且不想复制代码,那么创建一个模型关注点,HasIsraeliId 或其他东西。这就是问题所在。

# app/models/concerns/has_israeli_id.rb
module HasIsraeliId
  extend ActiveSupport::Concern

  included do
    validate :some_field, whatever_condition: true
  end
end

# app/models/user.rb
class User < ApplicationRecord
  include HasIsraeliId
end

【讨论】:

  • 我可能没有解释清楚,我想让几个模型的列通过特定的验证方法,我在哪里把这个验证方法包含在所有models.rb中?
  • @KamalG'ool 在这种情况下,您创建一个custom validator 并在您的模型中分配它。验证逻辑不会重复。
  • 将其作为示例发布以使用任何服装验证方法名称进行验证,以及如何将其包含在模型中
  • @KamalG'ool:我们不会在这个网站上提出这样的要求 :)
  • 对不起,不是粗鲁的意思,我的意思是为了选择它作为正确答案:)
猜你喜欢
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
相关资源
最近更新 更多