0

我使用acts-as-taggable-on 进行标记。

公寓控制器

def index
  if params[:tag]
    @apartments = Apartment.tagged_with(params[:tag])
  else
    @apartments = Apartment.all
  end    
end

路线

resources :apartments do
  #...
  collection do
    get ':tag', to: 'apartments#index', as: :tag
  end
  #...

/apartments/tag1我通过示例等获得了不错的网址。

我想根据公寓index模板中的标签名称显示自定义内容。

Apartmentindex观点:

- @appartments.each do |tags|
   - case tags.tag_list
   - when "tag1"
      %p tag1 content
   - when "tag2"
      %p tag2 content
   - else
      %p default content

当我转到 urlapartments/tag1时,文本"default content"是显示而不是"tag1 content"

我究竟做错了什么?

4

1 回答 1

1

关于您的代码有几个注意事项:

  1. 让你的逻辑远离观点。即将代码提取到辅助方法中。
  2. 不要使用caseon Enumerable,在你的情况下它看起来像一个数组。用于include?检查元素是否存在于数组中:

1.9.3p194 :001 > a= [:a, :b, :c]
 => [:a, :b, :c] 
1.9.3p194 :002 > case a
1.9.3p194 :003?>   when :a
1.9.3p194 :004?>   p '1'
1.9.3p194 :005?>   when :b
1.9.3p194 :006?>   p '2'
1.9.3p194 :007?>   when :c
1.9.3p194 :008?>   p '3'
1.9.3p194 :009?>   when :d
1.9.3p194 :010?>   p 'Never'
1.9.3p194 :011?>   end
 => nil 
1.9.3p194 :012 > a.include?(:c)
 => true 
于 2012-11-16T17:18:58.790 回答