2014-09-22 99 views
2

我是新来的红宝石......我在user.rb得到一个名称错误NameError - 未定义的局部变量或方法'收藏夹

NameError - undefined local variable or method `favorites' for #<User:0x007fc0e19a8720>: 
    activemodel (4.0.5) lib/active_model/attribute_methods.rb:439:in `method_missing' 
    activerecord (4.0.5) lib/active_record/attribute_methods.rb:167:in `method_missing' 
    app/models/user.rb:17:in `favorited' 
    app/views/favorites/_favorite.html.erb:2:in `_app_views_favorites__favorite_html_erb__4203159933335848505_70233146456940' 

这是我user.rb文件:

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, :confirmable 
    has_many :posts, dependent: :destroy 
    has_many :comments 
    has_many :votes, dependent: :destroy 
    has_many :users, dependent: :destroy 
    mount_uploader :avatar, AvatarUploader 

    def role?(base_role) 
    role == base_role.to_s 
    end 

    def favorited(post) 
    favorites.where(post_id: post.id).first 
    end 

end 

这是我favorite.rb文件:

类收藏<的ActiveRecord :: Base的

has_many :users, dependent: :destroy 
has_many :posts, dependent: :destroy 

结束

我不明白为什么我得到名称错误。

+2

您尚未定义名为'favourites'的关联。 – usha 2014-09-22 19:40:02

回答

3

你的错误读取:

NameError - undefined local variable or method `favorites' for #<User:0x007fc0e19a8720> 

换句话说,它告诉你,你正在调用方法favoritesUser实例和方法是不是该对象类型定义。

由于您的user.rb文件既没有用户喜好关联(它会自动为您创建该方法),也没有明确的方法,这是有道理的。为了避免这个错误,你需要一个或另一个。

我同意Vimsha的建议 - 这看起来像一个关联,为此您最好使用Rails的内置关联方法(可能是has_many :favorites),而不是自己编写关联方法。

相关问题