用“has_many:through”验证

时间:2012-07-15 06:45:09

标签: ruby-on-rails validation orm associations

我的用户模型中有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认为验证不是必需的,但它看起来很奇怪。

1 个答案:

答案 0 :(得分:0)

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

它抛出异常是因为你想要为某个值赋值,并尝试将值保存到users表中,在验证方法“my_validate”中你会引发一些错误,意味着如果你想保存任何值就会抛出错误

User.find(1).roles = []

但在第二种方法中,您将为角色表分配一些值而不是  用户表。这是明智的,它没有抛出任何错误。

相关问题