使用元标签gem -需要为每个类别创建不同的标签



我使用元标签gem - https://github.com/kpumuk/meta-tags

当它只是添加元标签到分类页面,我可以这样做,它的工作:

  def show
    @page_title = 'x'
    @page_description = 'x'
    @page_keywords = 'x'

    if params[:city_id]
      @city = City.friendly.find(params[:city_id])
      @category = Category.friendly.find(params[:id])
      @suppliers = Supplier.for_city_and_category(@city, @category)
                            .order_by_rating.includes(:reviews)
      @review_count = 0
      @suppliers.each { |supplier| @review_count += supplier.reviews.visible.count }
    else
      @category = Category.friendly.find(params[:id])
      @suppliers = @category.suppliers.order_by_rating.includes(:reviews)
      @review_count = 0
      @suppliers.each { |supplier| @review_count += supplier.reviews.visible.count }
      render 'categories/show_all'
    end
  end

然而,有不同的类别,我想根据类别使用不同的元标签。我试过:

  def show
    if Category.name == 'Cars'
      @page_title = 'x'
      @page_description = 'x'
      @page_keywords = 'x'
    end
    if params[:city_id]
      @city = City.friendly.find(params[:city_id])
      @category = Category.friendly.find(params[:id])
      @suppliers = Supplier.for_city_and_category(@city, @category)
                            .order_by_rating.includes(:reviews)
      @review_count = 0
      @suppliers.each { |supplier| @review_count += supplier.reviews.visible.count }
    else
      @category = Category.friendly.find(params[:id])
      @suppliers = @category.suppliers.order_by_rating.includes(:reviews)
      @review_count = 0
      @suppliers.each { |supplier| @review_count += supplier.reviews.visible.count }
      render 'categories/show_all'
    end
  end

…但这是不对的。我不确定如何正确地分配元标签到各个类别....

Show

我想你把你的show动作搞混了:

def show
    if Category.name == 'Cars'

这将永远不会产生您想要的结果,因为类Category没有实例化状态。只有当你有classinstance时,你才能调用.name方法:

def show
   @category = Category.find params[:id]
   if @category.name == "cars"
      ...
   end
end

,

我会这样做:

#app/controllers/categories_controller.rb
Class CategoriesController < ApplicationController
   after_action :set_tags
   def show
      @category = Category.find params[:id]
      @page_title = @category.name
   end
   private
   def set_tags
      set_title_tag @page_title
   end
end

如果您想根据db返回的内容手动设置标签,您可以这样做:

#app/controllers/categories_controller.rb
Class CategoriesController < ApplicationController
   def show
      @category = Category.find params[:id]
      case @category
         when "car"
            @page_title = "x"
         when "not car"
            @page_title = "y"
      end
   end
end

最新更新