有很多关于:reject_if
不工作的问题。这里还有一个案例。被:reject_if
完全绕过了。
这是用户模型中的代码:
class User < ActiveRecord::Base
attr_accessible :name, :login, :email, :password, :user_type, :user_levels_attributes, :as => :role_new
has_many :user_levels, :dependent => :destroy
accepts_nested_attributes_for :user_levels, :reject_if => proc { |a| a['position'].blank? }, :allow_destroy => true
end
用户有许多用户级别,其中包含用户位置信息。这是user_level的模型:</p>
class UserLevel < ActiveRecord::Base
belongs_to :user
validates :position, :presence => true
end
不应该保存没有位置的用户,这:reject_if
就是应该做的。然而我们尝试了,proc, lambda, 'position' and :position
. 最后我们甚至试图:reject_if => true
强制执行:reject_if
. 保存了具有空白位置的用户,并且以上都没有在user_level
. 似乎:reject_if
完全被绕过了。
我们上面的代码有什么问题?谢谢你。