0

I am currently getting the following error on my post model which is under act_as_taggable_on for tags and channels.

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

I seems that rails cannot detect the existence of tag_list_on or set_tag_list_on methods; however, it does detect the tagged_with method, whose source is located in the exact same module as the other files.

RubyMine can detect the existence of all of these methods fine btw.

Here is the section of code that I'm performing all of these operations on.

@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")                           
4

1 回答 1

1

tagged_with是 的类方法Post,由acts_as_taggable_ongem 添加。

@posts在您的代码中是 的实例ActiveRecord::Relation,而不是Post类本身或它的任何实例。

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

tagged_with说它回来了

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

tag_list_on并且set_tag_list_on是类的实例方法Post,由acts_as_taggablegem 添加。

您需要为每个实例tag_list_on调用andset_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]

# ...
于 2012-08-09T16:54:51.180 回答