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

我尝试了以下解决方案之一,但它没有我想要的功能:

  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 的组合间接获取消息的 rails 方法更好?和用户错误?

谢谢!

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 回答