before_create undefined方法`has_role?'为零:NilClass

时间:2013-11-08 08:20:39

标签: ruby-on-rails devise

我正在使用关系user has_many websites的设计 在创建新网站时会引发undefined method has_role? for nil:NilClass

class Website  < ActiveRecord::Base
  attr_accessible :priority

  belongs_to :user
  before_create :set_priority

 private 
  def set_priority
    if user.has_role? :admin
      self.priority = 3
    end
  end
end

1 个答案:

答案 0 :(得分:0)

要扩展sevenseacat的评论,您的所有网站是否都必须属于用户?如果您一直希望该网站有用户,那么您应该验证该字段:

validates :user_id, presence: true # Enforce the presence of a user for each website

通过在尝试使用之前检查用户对象是否存在,您还可以使方法出错:

def set_priority
  if user && user.has_role? :admin
    self.priority = 3
  end
end

请注意,如果没有用户对象,这将使priority保持不变 - 您是否需要为非管理员设置不同的优先级,或者如果用户为空?