我必须有条件地验证我的User
。用户注册后,他可以完成其余的个人资料。它分为几部分,例如,有“教育背景”和“专业背景”。这些部分由字段组成,我必须验证(例如存在)。
因此,当然,这些字段不应在注册期间验证,而是仅在用户尝试编辑这些字段时验证。一个自然的想法是在表单中发送context
参数,并执行以下操作:
class User < ActiveRecord::Base
attr_accessor :context
with_options if: -> { |u| u.context == "educational" } do |s|
s.validates :university_name, presence: true
# ...
end
end
但是如果我还需要在块中进行条件验证呢?
class User < ActiveRecord::Base
attr_accessor :context
with_options if: -> { |u| u.context == "educational" } do |s|
s.validates :university_name, presence: true, if: :finished_university?
# ...
end
end
这意味着那些:if
的人会发生冲突。我可以将块中的每个:if
转换为:unless
,但这会损害可读性,我真的不希望这样。
这个问题有另一个解决方案吗?
答案 0 :(得分:2)
如果您需要这么多'if'语句,那么您的模型可能存在缺陷。也许您需要从用户中提取新模型,定义新资源和控制器。
编辑: 这个宝石可能会有所帮助: https://github.com/stevehodgkiss/validation-scopes
答案 1 :(得分:0)
怎么样
validates :university_name, presence: true, if: :finished_university? && lambda {|u| u.context == "educational"}