2016-12-29 83 views
0

我可能没有找到正确的单词以获得答案,所以你是我的最后一次机会。在rails中创建一个新的列数据类型

我期待创造一个轨道新数据类型,例如: t.israeli_id

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

我将在几个表中使用这个数据类型,所以使它成为一个字符串,并在每个model.rb中传递验证函数将非常干燥。

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

+0

也看这里:http://stackoverflow.com/questions/2617447/rails-creating-a-custom-data-type-creating-a-shorthand –

回答

1

不,你正在以一种错误的方式接近这个。数据库对您的应用程序逻辑一无所知,它只能进行基本验证(不为空等)。

所有应用程序特定的验证,错误消息和其他东西 - 它会进入您的模型。如果你需要在多个模型中使用它,并且不想复制代码,那么请创建一个模型问题,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 
+0

我可能没有解释得很好,我想几个模型的列将通过特定的验证方法传递,我应该在哪里将此验证方法包含在所有models.rb中? –

+0

@ KamalG'ool在这种情况下,您可以创建一个[自定义验证器](http://guides.rubyonrails.org/active_record_validations.html#custom-validators)并将其分配到模型中。验证逻辑将不会被复制。 –

+0

以示例的方式发布它以验证任何costum验证方法的名称,以及如何将其包含在模型中 –

相关问题