0

我想让用户每个用户只有一个预科。但是我收到错误“nil:NilClass 的未定义方法 `matriculations'”。我怎样才能让它工作?(如果有问题,我使用设计作为用户身份验证)。

 def matriculation_limit
  if self.user.matriculations(:reload).count <= 1
    errors.add(:base, "Yuo already have one matriculation form")
  else
    redirect_to new_matriculation_path
  end
 end
4

2 回答 2

1

有了has_one关联,那么关联查找器方法是单数的,例如@user.matriculation,不是@user.matriculations。而且没有必要计算它们,因为只会有一个。

关于评论:

您不需要在任何地方检查用户有多少预科,因为它是一个单一的关联,所以您只需更新关联(更改表中外键列matriculation_id中的 ID users

class User < ActiveRecord::Base
  has_one :matriculation, :class_name => "User", :foreign_key => "matriculation_id"
end

class Matriculation < ActiveRecord::Base
  belongs_to :user
end

# some controller action...
  @user.matriculation = Matriculation.find(params[:matriculation_id]) # or something!
于 2013-05-08T16:16:35.693 回答
0

self.user == user_object.user. 似乎你没有类用户的方法用户。还有另一件事,你有 has_one,所以你必须使用self.matriculation

所以正确的是

if self.matriculation
    errors.add(:base, "Yuo already have one matriculation form")
  else
    redirect_to new_matriculation_path
  end
于 2013-05-08T16:27:02.750 回答