我目前在我的帖子模型上收到以下错误,该错误位于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")
答案 0 :(得分:1)
tagged_with
是Post
的类方法,由acts_as_taggable_on
gem添加。
@posts
是ActiveRecord::Relation
的实例,而不是Post
类本身或其任何实例。
tag_list_on
中没有ActiveRecord::Relation
实例方法,因此错误。
tagged_with
表示会返回
...用指定标签标记的对象范围。
tag_list_on
和set_tag_list_on
是Post
类的实例方法,由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]
# ...