在acts_as_taggable中,某些实例方法未定义

时间:2012-08-09 16:11:35

标签: ruby-on-rails ruby acts-as-taggable-on

我目前在我的帖子模型上收到以下错误,该错误位于act_as_taggable_on标签和频道下。

undefined local variable or method `tag_list_on' for #
<ActiveRecord::Relation:0x007f9864675b48>

我似乎rails无法检测到tag_list_on或set_tag_list_on方法的存在;但是,它确实检测到tagged_with方法,该方法的源位于与其他文件完全相同的模块中。

RubyMine可以检测所有这些方法是否存在.btw。

以下是我正在执行所有这些操作的代码部分。

@posts = Post.tagged_with(params[:tags]).paginate(:page => params[:page]|| 1, :per_page => 20)
user_tags = @posts.tag_list_on(:tags)                                                         
custom_tags = user_tags - params[:tags]                                                       
@posts.set_tag_list_on(:customs, custom_tags)                                                 
@tags = @posts.tag_counts_on(:customs, :order => "count desc").limit(10)                      
@channels = @posts.tag_counts_on(:channels, :order => "count desc")                           

1 个答案:

答案 0 :(得分:1)

tagged_withPost的类方法,由acts_as_taggable_on gem添加。

代码中的

@postsActiveRecord::Relation的实例,而不是Post类本身或其任何实例。

tag_list_on中没有ActiveRecord::Relation实例方法,因此错误。

tagged_with表示会返回

  

...用指定标签标记的对象范围。

tag_list_onset_tag_list_onPost类的实例方法,由acts_as_taggable gem添加。

您需要为tag_list_on

的每个实例致电set_tag_list_on@posts
user_tags = []
@posts.each do |post|
  user_tags = user_tags + post.tag_list_on(:tags) 
end
custom_tags = user_tags.uniq - params[:tags]

# ...