所以我想这样做,因为我认为这是执行错误最习惯的方式。制作一个在if语句中评估为false的对象
例如:
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
有没有办法做到像这样或有其他人找到了一种方法来处理错误,比当前的rails方式间接获取user.valid的组合信息更好?和user.errors?
谢谢!
这不是惯用的,为什么不在控制器中设置N个模型验证+一个'record.save'或'record.update_attributes'?控制器必须简单。 – tokland 2012-07-19 19:42:11