2

validate :my_validate在我的用户模型中有,但my_validate如果“has_may :through”属性被更改,则永远不会被调用。是正确的行为吗?

我的代码:

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 认为验证是不必要的,但它看起来真的很奇怪。

4

1 回答 1

0
User.find(1).name = 'new_name' 

它抛出异常是因为您想为名称分配一些值并尝试将值保存到用户表中,在验证方法“my_validate”中您会引发一些错误,这意味着如果您想保存任何值,它将引发错误。

User.find(1).roles = []

但是在第二种方法中,您为角色表分配了一些值,而不是在用户表中。明智的是,它不会引发任何错误。

于 2012-07-16T06:55:18.183 回答