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")
tagged_with
is a class method of Post
, added by the acts_as_taggable_on
gem.
@posts
in your code is an instance of ActiveRecord::Relation
, not the Post
class itself or any instance of it.
There is no tag_list_on
instance method in ActiveRecord::Relation
, hence the error.
tagged_with
says it returns
...a scope of objects that are tagged with the specified tags.
tag_list_on
and set_tag_list_on
are instance methods of the Post
class, added by the acts_as_taggable
gem.
You need to call tag_list_on
and set_tag_list_on
for each instance of @posts
user_tags = []
@posts.each do |post|
user_tags = user_tags + post.tag_list_on(:tags)
end
custom_tags = user_tags.uniq - params[:tags]
# ...