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'를 써서 console에 tag1이있는 아파트로 갈 때 출력 – MrYoshiji

+0

을 볼 수 있습니다. a = Apartment.find (28) a.tag_list 출력으로 "tag1"을 얻습니다. – Remco

+0

tag_list에 to_s를 시도하십시오 :'- cases tags.tag_list.to_s'. – MrYoshiji

답변

1

이 몇 가지주의 사항 :

  1. 이 전망에서 멀리 논리를 유지합니다. 나는. 코드를 도우미 메서드로 추출하십시오.
  2. caseEnumerable에 사용하지 마십시오. 귀하의 경우 배열처럼 보입니다. 어레이 내부 요소의 유무를 확인 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')'오타가있는 것처럼 보입니까? –