2015-07-25 1 views
0

J'ai une vue jbuilder qui renvoie json qui est rendue dynamiquement dans un partiel. L'un des attributs json est appelé in_list, qui est une valeur booléenne. Je voudrais rendre un bouton conditionnel en fonction de la valeur de ce booléen. Il semble que le booléen soit rendu sous forme de chaîne, mais même en tenant compte de cela, le conditionnel ne fonctionne jamais. Si je rends l'attribut in_list comme le texte sur la balise de bouton, je peux voir qu'il affiche correctement True ou False, mais lorsqu'il est utilisé dans le conditionnel, cela ne fonctionne pas.Utilisation de JSON rendu dans les rails Affichage de l'instruction conditionnelle

code:

.text-center.product_picker_controlls 
    - if '{raw-in_list}' == 'true' 
     = button_tag 'ADDED', type: 'submit', class: 'btn btn-danger btn-lg t03e', id: 'product-{raw-product_id}' 
     -# %a.btn.btn-primary.btn-lg.t03e{ href: "#{products_path(list_id: args[:list].try(:id) || '0', success: 'back')}&u={raw-id}", data: { method: :post } } 
      ADDED 
    - else 
     = button_tag 'ADD', type: 'submit', class: 'btn btn-primary btn-lg t03e', id: 'product-{raw-product_id}' 
     -# %a.btn.btn-primary.btn-lg.t03e{ href: "#{products_path(list_id: args[:list].try(:id) || '0', success: 'back')}&u={raw-id}", data: { method: :post } } 
      ADD 

Répondre

0

En plus examinant de près le code, je trouve qu'il y avait un fichier javascript qui a remplacé toutes les instances de {attribut brut} avec les valeurs correctes, donc cette manipulation DOM ne parvenaient pas à l'ERB lui-même. Ma solution consistait à ajouter le texte du bouton et la classe de bouton directement au JSON lui-même, puis à ajouter ces attributs dans le HAML.

nouvelle JSON dans le fichier JBuilder:

json.in_list @list.list_items.where(product_id: product[:product_retailer].try(:product_id)).exists? ? 'ADDED' : 'ADD' 
json.button_class @list.list_items.where(product_id: product[:product_retailer].try(:product_id)).exists? ? 'btn-danger' : 'btn-primary' 

nouvelle haml:

.text-center.product_picker_controlls 
    = button_tag '{raw-in_list}', type: 'submit', class: 'btn btn-lg t03e {raw-button_class}', id: 'product-{raw-product_id}' 
    -# %a.btn.btn-primary.btn-lg.t03e{ href: "#{products_path(list_id: args[:list].try(:id) || '0', success: 'back')}&u={raw-id}", data: { method: :post } } 
     '{raw-in_list}'