0

我必须有条件地验证我的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

这意味着那些 to :ifs 将发生冲突。我可以:if将块中的every转换为:unless,但这会损害可读性,我真的不希望这样。

这个问题还有其他解决方案吗?

4

2 回答 2

2

如果您需要这么多“if”语句,则您的模型可能存在缺陷。也许您需要从用户中提取新模型,定义新资源和控制器。

编辑:这个宝石可能会有所帮助: https ://github.com/stevehodgkiss/validation-scopes

于 2013-04-22T08:59:46.697 回答
0

怎么样

validates :university_name, presence: true, if: :finished_university? && lambda {|u| u.context == "educational"}

于 2013-04-22T08:37:12.537 回答