0

我基于此http://railscasts.com/episodes/382-tagging对我的网站实施了标记

我想在我的房屋资源中添加标签,所以我得到这样的网址......

/houses/tag1 /houses/tag2 等

我的路线文件:

localized(['en', 'nl', 'de']) do
  scope "/:locale" do
    resources :houses do
      collection do
        get ':tag', to: 'houses#index', as: :tag
      end
    #...
    end
  end
end

房屋控制器

if params[:tag]
  @houses = House.tagged_with(params[:tag])
  @tag = Tag.find_by_name(params[:tag])
else
  @houses = House.find.all
end

房屋模型(部分)

def self.tagged_with(name)
       Tag.find_by_name!(name).houses
     end

      def self.tag_counts
        Tag.select("tags.*, count(taggings.tag_id) as count").
          joins(:taggings).group("taggings.tag_id")
      end

      def tag_list
        tags.map(&:name).join(", ")
      end

      def tag_list=(names)
        self.tags = names.split(",").map do |n|
          Tag.where(name: n.strip).first_or_create!
        end
      end

这适用于房屋资源中的标签。但是当我通过示例房屋/房屋名称1转到房屋ID(显示方法)时,我收到一条错误消息

undefined method `houses' for nil:NilClass
house.rb:41:in `tagged_with'

我究竟做错了什么?

Ciao..remco

4

1 回答 1

0

房屋和标签的路线正在崩溃。您需要决定如何访问标签。我建议:

选项1

标签可以是一个单独的资源:

resources :houses
resources :tags

选项 2

标签可以像过滤器一样houses#index。在这种情况下,您不需要在路由中定义标签,只需:

resources :houses

然后只需使用这种路由按标签过滤房屋:

/houses/?tag=tag1
于 2012-12-05T22:09:59.240 回答