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 が衝突します。ブロック内のevery を に変換することもできますが、これは可読性を損なうので、本当にそうしたくありません。:if:unless

この問題の別の解決策はありますか?

4

2 に答える 2

0

どうですか

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

于 2013-04-22T08:37:12.537 に答える