所以我想這樣做,因爲我認爲這是執行錯誤最習慣的方式。製作一個在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