你有一个Lung模型。在里面,你说:
validates_presence_of :human_id
应用程序的用户无法控制是否设置了human_id;应用程序应该是自动的。
如果:human_id从来没有出现过,它不会帮助您的用户告诉他们“这个肺不依附于人类”,因为您的用户将无法对它做任何事情。是时候让你的模型抓狂并抛出一个异常了吗?
您的模型应该关心给定验证错误的严重程度吗?这是业务逻辑的一部分吗?模型应该在验证期间抛出异常,还是应该由控制器负责从模型中解释“哑”验证并为视图生成有用的数据?
编辑:如果这是一件可以接受的事情,那么在模型验证期间如何抛出异常有什么约定吗?
发布于 2011-01-18 14:50:04
我将设置我的ActiveRecord迁移,以便human_id列不能是null。这样你就会得到一个例外,无论如何,如果没有设置。
create_table :lungs do |t|
t.integer :human_id, :null => false
...
end发布于 2011-01-18 10:01:08
我认为应该作为例外情况提出来。应用程序将在大多数情况下使用human_id,并且只有在特殊情况下才可能不存在human_id,例如精心编制的请求或后端的定时注销。由于这些是例外情况,所以值得抛出异常,而不是让控制器来处理它。
发布于 2011-01-18 10:14:50
在我看来,验证并不是检查这种模型一致性的合适地方。验证只适用于用户生成的输入。
问题是:在没有人类身份的情况下,肺怎么可能产生呢?如果答案只是通过编程顺序,那么您应该修复这个错误,并为它创建一些测试用例。或者,如果您真的想每次检查它,可以在before_save回调中检查它。
https://stackoverflow.com/questions/4721464
复制相似问题