2015-07-25 2 views
0

У меня есть представление jbuilder, которое возвращает json, который динамически отображается в частичном. Один из атрибутов json называется in_list, который является логическим значением. Я бы хотел условно отобразить кнопку в зависимости от значения этого булева. Похоже, что boolean выводится как строка, но даже при учете этого условие никогда не работает. Если я передаю атрибут in_list как текст тега кнопки, я вижу, что он правильно отображает True или False, но при использовании в условном выражении это не работает.Использование рендеринга JSON в rails просмотр условного оператора

код:

.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 

ответ

0

В более внимательном изучении кода, я обнаружил, что там был Javascript файл, который заменил все экземпляры {сырым атрибутом} с соответствующими значениями, так что DOM манипуляции не доходит до самой ЕРБ. Мое решение состояло в том, чтобы добавить текст кнопки и кнопочный класс непосредственно к самому JSON, а затем добавить эти атрибуты в HAML.

новый JSON в файле 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' 

новый 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}' 
Смежные вопросы