我的用户模型中有validate :my_validate
,但如果更改了“has_may:through”属性,则永远不会调用my_validate
。这是正确的行为吗?
我的代码:
class User < ActiveRecord::Base
has_many :roles, :through => :user_roles
validate :my_validate
def my_validate
raise 123
end
抛出异常:
User.find(1).name = 'new_name'
这有效:
User.find(1).roles = []
我知道用户表没有更新,所以rails认为验证不是必需的,但它看起来很奇怪。
答案 0 :(得分:0)
User.find(1).name = 'new_name'
它抛出异常是因为你想要为某个值赋值,并尝试将值保存到users表中,在验证方法“my_validate”中你会引发一些错误,意味着如果你想保存任何值就会抛出错误
User.find(1).roles = []
但在第二种方法中,您将为角色表分配一些值而不是 用户表。这是明智的,它没有抛出任何错误。