我有2个型号:
模型类型:
id
- 键name
- 输入姓名模型数据:
id
- 键type_id
- 数据类型的ID main_value
- 必填数据opt_value
- 可选数据(仅限指定数据类型)如果我知道指定的validates_presence_of
存在且无法更改,我该如何opt_value
type.name
?
我试过这个方法:
validates_presence_of :opt_value, :if => lambda { self.type_id == get_type_id }
def get_type_id
Type.find_by(name: 'i_know_this_type_exists') # with and without .id
end
但它不起作用。我想是因为我无法从Data
模型访问Type
模型。
虽然我可以在迁移中插入预定义的数据类型,并知道哪个id
已指定数据类型,但我不想在验证id
内对此:if => lambda { self.type_id == 2 }
进行硬编码(即使它作品)。
我如何验证此类案件?
答案 0 :(得分:1)
你可以试试这个
验证:opt_value,:presence =>是的,:if => Proc.new {| optvalue | optvalue.is_verified? }
def is_verified?
self.is_verified == "Verified"
end
答案 1 :(得分:0)
我认为特殊类型逻辑应该驻留在Type类
中class Type < ActiveRecord::Base
def self.special_type
Type.find_by(name: 'i_know_this_type_exists').id
end
end
使用Proc而不是lambda
class Model < ActiveRecord::Base
validates_presence_of :opt_value, :if => Proc.new{|f| f.type_id == Type.special_type }
end
答案 2 :(得分:0)
我从另一个网站上的用户 alexesDev 得到了这个建议。它有效。
validates_presence_of :opt_value, if: :have_opt_value?
def have_opt_value?
type_id == Type.select('id').where(name: 'some type').first
end