Как интерполировать переменные экземпляра в deface и Spree?

Я пытаюсь добавить max значение этой формы в частичном для Spree с использованием Deface.

Deface::Override.new(
  :virtual_path => 'spree/products/_cart_form',
  :name => 'modify_max_add_to_cart',
  :replace_contents => ".add-to-cart",
  :text => "
          <%= number_field_tag (@product.variants_and_option_values.any? ? :quantity : 'variants[#{@product.master.id}]\'),
            1, :class => 'title', :min => 1, :max => @product.limit_qty %>
          <%= button_tag :class => 'large primary', :id => 'add-to-cart-button', :type => :submit do %>
            <%= Spree.t(:add_to_cart) %>
          <% end %>
  ")

Проблема в том, что она, похоже, ошибается, потому что там есть переменные экземпляра.

undefined method master for nil:NilClass

Как мне сделать это правильно?

1 ответ

Когда вы изменили эту строку

<%= number_field_tag (@product.variants_and_option_values.any? ? :quantity : "variants[#{@product.master.id}]")

чтобы использовать одинарные кавычки, вы нарушили интерполяцию переменных, которая происходила в этом фрагменте кода:

"variants[#{@product.master.id}]"

Вы можете исправить это, изменив строку на:

<%= number_field_tag (@product.variants_and_option_values.any? ? :quantity : \"variants[#{@product.master.id}]\")

На самом деле, вместо использования замены текста, вы должны рассмотреть возможность частичной замены. Это немного яснее с несколькими строками кода.

Другие вопросы по тегам