0

ですから、これはエラーを実行するための最も慣用的な方法だと思うので、これを実行したいと思います。

例えば:

User < ActiveRecord::Base
  def add_email?
    ...
    #in the case that it does have an error
    MyErrorObjectThatEvaluatesToFalse.new("The email is already taken")
  end

  def is_valid_user?
    ...
    MyErrorObjectThatEvaluatesToFalse.new("Username is not set")
    ...
  end
end

...

SomeController
    ...
    if error = user.add_email?
      render_error_msg(error.message) and return
    elsif error = user.is_valid_user?
      render_error_msg(error.message) and return
    end
    ...
end

以下の解決策の1つを試しましたが、必要な機能がありません。

  class A
    def ==(comp)
      false
    end
  end

  a = A.new
  if a
    puts "'a' evaluated to true"
  else
    puts "'a' evaluated to false"
  end

  #=> 'a' evaluated to true

このようなことを行う方法はありますか、またはuser.validの組み合わせで間接的にメッセージを取得する現在のレールの方法よりも優れたエラーを処理する方法を他の誰かが見つけましたか?とuser.errors?

ありがとう!

4

1 に答える 1

0

これを検証の方法としてはお勧めしませんが、コンパレータで false を返すクラスを定義するには:

class A
  def ==(comp)
    false
  end
end

A.new == "a"   #false
A.new == true  #false
A.new == false #false
A.new == nil   #false

Rails の組み込みの検証を使用することをお勧めします。

class User < ActiveRecord::Base
  validates :username, :presence => true
end

user = User.new
user.errors #["username must not be blank"]
于 2012-07-19T19:52:45.180 に答える