0

J'utilise acts-as-taggable-on pour le marquage.les conditions ne fonctionnent pas correctement

apartments_controller

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

routes

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

je reçois urls Nice par exemple /apartments/tag1 etc.

Je veux montrer un contenu personnalisé en fonction du nom de la balise dans les appartements index modèle.

Apartment vue « index:

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

Quand je vais à url apartments/tag1 le texte est "default content" spectacle et non "tag1 content".

Qu'est-ce que je fais mal?

+0

ce qui est la sortie de 'tags.tag_list'? Vous pouvez faire '% p = tags.tag_list' avant votre déclaration de cas pour voir la sortie – MrYoshiji

+0

quand je vais dans un appartement avec un tag1 dans la console. a = Apartment.find (28) a.tag_list je reçois "tag1" comme sortie – Remco

+0

Essayez un to_s sur la tag_list: '- case tags.tag_list.to_s'. – MrYoshiji

Répondre

1

Il plusieurs notes sur votre code:

  1. Gardez votre logique loin de vue. C'est à dire. extraire le code dans les méthodes auxiliaires.
  2. Ne pas utiliser case sur Enumerable, dans votre cas, il semble être un tableau. Utilisez include? pour vérifier si l'élément est présent à l'intérieur d'un tableau:

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

J'ai essayé votre suggestion, comme ceci par l'exemple ... rails c> a = Apartment.find (26)> a.tag_list> sortie => ["lux", "familie", "groupes"] puis a.include ? ("lux") j'obtiens cette erreur NoMethodError: méthode undefined 'include? ' (ruby 1.9.2p290/activemodel-3.2.8) – Remco

+0

'a.tag_list.include? ('lux')' On dirait qu'il y a une faute de frappe? –

Questions connexes