0

我使用acts-as-taggable-on進行標記。條件不正常工作

apartments_controller

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等漂亮的URL

我想表明基於標記名稱自定義內容,公寓index模板。

Apartmentindex觀點:

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

當我去URL apartments/tag1文本"default content"是表演,而不是"tag1 content"

我在做什麼錯?

+0

是什麼'tags.tag_list'的輸出?您可以在case語句前執行'%p = tags.tag_list'來查看輸出 – MrYoshiji

+0

,當我去控制檯中的tag1的公寓時。 a = Apartment.find(28)a.tag_list我得到「tag1」作爲輸出 – Remco

+0

在tag_list上嘗試一個to_s:'case tags.tag_list.to_s'。 – MrYoshiji

回答

1

你的代碼中有幾個注意事項:

  1. 從景色讓您遠離邏輯。即將代碼提取到輔助方法中。
  2. 不要在Enumerable上使用case,在你的情況下它看起來像一個數組。使用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 
+0

我試過你的建議,像這個例子... rails c> a = Apartment.find(26)> a.tag_list> output => [「lux」,「familie」,「groups」]然後a.include ?(「lux」)我得到這個錯誤NoMethodError:未定義的方法'include?' (ruby 1.9.2p290/activemodel-3.2.8) – Remco

+0

'a.tag_list.include?('lux')'好像有錯字? –