2013-08-30 1 views
0

Dewall을 사용하여 Spree에서 부분적으로이 양식에 max 값을 추가하려고합니다.deface 및 Spree에서 인스턴스 변수를 보간하는 방법은 무엇입니까?

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

어떻게 적절하게이 작업을 수행합니까?

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

당신은 라인을 변경하여이 문제를 해결할 수 있습니다 : 당신은 작은 따옴표를 사용하는이 라인

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

을 변경

+0

변종 [# {@ product.master.id}] \를 변종 [@ product.master.id]로 변경해보십시오. – zrl3dx

답변

0

, 당신은 코드의이 비트에 발생하는 한 변수 보간을 깨고 받는 사람 :

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

사실 텍스트 대체를 사용하는 대신 부분 교체를 사용하여 온 사이더. 여러 줄의 코드로 꽤 명확 해졌습니다.