所以我想这样做,因为我认为这是最常用的做错误的方式。
例如:
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方式更好?和user.errors?
谢谢!
答案 0 :(得分: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'built in validations。
class User < ActiveRecord::Base
validates :username, :presence => true
end
user = User.new
user.errors #["username must not be blank"]