我有两个模型:Source和SourceType。当然来源属于SourceType
我想创建新的源并为其分配适当的sourcetype对象。 '适当'表示源对象的一个虚拟属性与某些sourceType对象测试regexpression匹配,后者成为源类型。
我在源对象
中有一个属性编写器class Source < ActiveRecord::Base
belongs_to :source_type
def url=(value)
SourceType.each do |type|
# here i match type's regexp to input value and if match,
# assign it to the new source object
end
end
end
我不想为它构建任何自定义验证器,并且需要两次运行SourceTypes。如果没有源类型适合输入,如何引发验证错误,以便用户可以在表单中看到错误原因?
答案 0 :(得分:2)
<强>验证强>
如果使用attr_accessor
设置虚拟属性,则应该能够对要发送数据的模型进行验证(如果您想要在嵌套模型上进行验证,请使用inverse_of
):
http://api.rubyonrails.org/classes/ActiveModel/Validator.html
现在可以与validates方法结合使用(有关详细信息,请参阅ActiveModel :: Validations :: ClassMethods.validates)。
class Person
include ActiveModel::Validations
attr_accessor :title
validates :title, presence: true
end
<强>代码强>
我会这样做:
class Source < ActiveRecord::Base
belongs_to :source_type, inverse_of: :sources
attr_accessor :url
end
class SourceType < ActiveRecord::Base
has_many :sources, inverse_of: :source_type
validates :source_type_attr, presence: { if: :url_match? }
def url_match?
self.sources.url == [your_regex]
end
end