3

たくさんの商品を一覧表示するtaxons#showページがあります。商品をクリックすると、個々の商品ページであるproducts#showに移動します。このページには、部分的な_cart_form.html.erbが表示されます。これには、製品をカートに追加したり、サイズや色などを選択したりするための一連の機能があります。

Taxons#showで、製品をクリックすると、個々の製品ページに移動する代わりに、taxons#showで、_cart_form.html.erbの一部を含むライトボックスを表示したいと思います。ライトボックスは機能しています。画像をクリックすると、products#showページに移動するのではなく、ライトボックスが正しく表示されますが、内部の一部をレンダリングする方法がわかりません。これが私がこれまでに持っているリンクです:

<div class="main-image" id="single_<%= product.id %>" data-productid="<%= product.id %>">
      <%= link_to large_image(product, :itemprop => "image", :class => "product-image", :id => product.id), product_path(product), :remote => true, :html => {:class => "product_popup"}  %>
</div><!-- main-image-->

そして、ライトボックスコードは表示されるdivです:クリックされるまでなし、次のようになります:

<%# ******LIGHTBOX******* %>
<div id="product_popup_<%= product.id %>" class="product_popup" data-popid="<%= product.id %>">
        <div class="related-products">
          <ul class="related_products_list" id="related_products_list_<%= product.id %>" data-listid="<%= product.id %>">
         <% @related_products.each do |related_product| %>
         <li class="related_products_item"><%= link_to large_image(related_product, :itemprop => "image", :data => {:imageid => related_product.id}, :id => "related_" + related_product.id.to_s, :class => "related_products_image dimmed"), url_for(related_product) %></li>
         <% end %>
    </ul>
        </div>
        <div class="popup-image">
        <%= large_image(product, :itemprop => "image", :class => "product-image-popup") %>
</div><!-- popup-image -->

ライトボックス内のリンクをクリックしたときにパーシャルをレンダリングする方法を教えてもらえますか?ありがとう!

編集**

taxons#show内のライトボックスでパーシャルを直接レンダリングしようとすると、次のNoMethodエラーが発生します。

 NoMethodError in Spree/taxons#show

 Showing    /home/telegraph/telegraph1/pants.telegraphbranding.com/app/views/spree/shared/_cart_form.html.erb where line #4 raised:

undefined method `has_variants?' for nil:NilClass
Extracted source (around line #4):

1: <%= form_for :order, :url => populate_orders_path do |f| %>
2:   <div id="inside-product-cart-form" data-hook="inside_product_cart_form"     itemprop="offers" itemscope itemtype="http://schema.org/Offer">
3: 
4:     <% if @product.has_variants? %>
5:       <div id="product-variants" class="columns five alpha">
6:         <h6 class="product-section-title"><%= t(:variants) %></h6>
7:         <ul>

[更新9/24/13]

マークされた解決策は上記の問題を修正しましたが、ひどいスタックレベルのエラーが発生し、機能が失われました。しかし、これは良い解決策だと思います。

部分レンダリング時に「スタックレベルが深すぎます」エラーのルートが見つかりません

4

1 に答える 1

5

私が行う方法は、アプリにライトボックスをAJAXicallyにレンダリングさせることです

products_controller.rb

def show
  @product = Product.find params[:id]
  respond_to :js
end

show.js.erb

$("[id^='product_popup_']").remove();
$(body).append("<%= escape_javascript(render 'product_lightbox', product: @product) %>");

_product_lightbox.html.erb

<%# ******LIGHTBOX******* %>
<div id="product_popup_<%= @product.id %>" class="product_popup" data-popid="<%= @product.id %>">
  <div class="related-products">
      <ul class="related_products_list" id="related_products_list_<%= @product.id %>" data-listid="<%= @product.id %>">
     <% @related_products.each do |related_product| %>
     <li class="related_products_item"><%= link_to large_image(related_product, :itemprop => "image", :data => {:imageid => related_product.id}, :id => "related_" + related_product.id.to_s, :class => "related_products_image dimmed"), url_for(related_product) %></li>
     <% end %>
</ul>
    </div>
    <div class="popup-image">
    <%= large_image(product, :itemprop => "image", :class => "product-image-popup") %>
<%= render 'shared/cart_form' %>
</div><!-- popup-image -->

しかし、あなたの質問では、あなたは実際にあなたが抱えている問題を明確にしていません。ライトボックスコードでパーシャルをレンダリングしてみましたか?:/

編集-あなたのエラーに基づいて、@productnilです。したがって、カートを部分的にレンダリングする前に、を設定します。<% @product = product %>これは、ライトボックスコードがを使用しているように見えるためproductです。それ以外の場合は@product、コントローラーから下に向かって使用するだけで、すべてが使用するパーシャルをレンダリングするビューを作成できます@product

もう一度編集する-または、次のように製品オブジェクトをローカルとしてパーシャルに渡し、の代わりに<%= render 'bla', :product => product %>使用するようにパーシャルに編集します。product@product

于 2013-03-25T15:28:08.563 に答える