1
我正在使用rails 4 + mongoid 4 beta1。rails + mongoid驗證動態屬性
產品屬於類別,並具有基於類別的動態屬性。我使用自定義方法驗證動態屬性,但它看起來很醜。我如何在我的自定義方法中使用standart validate方法,或者有更好的方法?
這裏是我的模型(不完全):
class Product
include Mongoid::Document
include Mongoid::Attributes::Dynamic
belongs_to :category
before_validation :custom_field_to_datatype
validates :category_id, :presence => true
validate :custom_fields_validator
private
def custom_field_to_datatype
self.category.product_attributes.each do |pr_at|
name = pr_at.name.to_sym
if pr_at.type == 'boolean'
self[name] = self[name].to_bool
elsif pr_at.type == 'integer'
self[name] = self[name].to_i
end
end
end
def custom_fields_validator
max_length = 30
max_integer = 9223372036854775807
min_integer = -9223372036854775807
self.category.product_attributes.each do |pr_at|
name = pr_at.name.to_sym
case pr_at.type
when 'string'
errors.add(name, "Длина строки должна быть не больше #{max_length} символов") if self[name].length > max_length
when 'integer'
if self[name] > max_integer
errors.add(name, "Значение должно быть не больше #{max_integer}")
elsif self[name] < min_integer
errors.add(name, "Значение должно быть не меньше #{min_integer}")
end
end
end
end
end
我認爲這是最好的,你可以得到... –
@kolas我正在使用這種方法來創建動態字段。創建動態字段更合適或將動態值存儲在散列字段中,然後通過散列檢索這些值?如果我使用散列,我可以轉動動態屬性。或者我應該同時使用哈希和動態屬性。 – StarWars