我有2个模型。User
和Want
。一个User
has_many:
Want
。
除了 之外,Want
模型还有一个属性user_id
,那就是name
。
我在Want
模型中编写了一个自定义验证,因此用户无法提交以创建 2 个具有相同名称的需求:
validate :existing_want
private
def existing_want
return unless errors.blank?
errors.add(:existing_want, "you already want that") if user.already_wants? name
end
该already_wants?
方法在用户模型中:
def already_wants? want_name
does_want_already = false
self.wants.each { |w| does_want_already = true if w.name == want_name }
does_want_already
end
验证规范在我的模型测试中通过,但是当我尝试向以下create
操作提交副本时,我的功能测试失败WantsController
:
def create
@want = current_user.wants.build(params[:want])
if @want.save
flash[:success] = "success!"
redirect_to user_account_path current_user.username
else
flash[:validation] = @want.errors
redirect_to user_account_path current_user.username
end
end
我得到的错误: can't dump hash with default proc
没有导致我的代码的堆栈跟踪。
我已将问题缩小到这一行:
self.wants.each { |w| does_want_already = true if w.name == want_name }
如果我只是返回true
,而不管错误显示在我的视图中,我想。
我不明白?怎么了?为什么它如此神秘?
谢谢。