1

taxons#show に、多くの製品を一覧表示するページがあります。taxons#show の内部で、部分的な _products.html.erb をレンダリングして、製品、画像、バリアントなどを表示しています。デフォルトでは、taxons#show rails で個々の製品をクリックすると、products#show ページにリダイレクトされます。部分的な _cart_form.html.erb がレンダリングされ、カートに追加するオプションが表示されます。

ただし、taxons#show 内にある _products.html.erb のライトボックス内に _cart_form.html.erb をレンダリングしようとしています。私の問題は、 _products.html.erb が使用していることです

<% products.each do |product| %>

個々の製品を表示します。また、_cart_form.html.erb は @product を使用してすべての製品情報を表示しています。このままにしておくと、@product が定義されていないため、nilClass の NoMethod エラーが発生します。

それから私は試しました:

<% @product = product %>
<%= render 'spree/shared/cart_form' %>

しかし、これは taxons#show のすべての製品を出力するコードの上にあるため、_product.html.erb 内のすべての製品を同じ製品 (最初にリストされた製品) に変更します。

個々の製品のライトボックス内で _cart_form.html.erb をレンダリングするにはどうすればよいですか?

ここに taxons_controller.rb があります:

  def show
  @taxon = Taxon.find_by_permalink(params[:id])
  return unless @taxon

  @taxon_id = params[:id].split('/').first
  if @taxon_id 
    instance_variable_set "@enable_#{@taxon_id}", true   #big lettered taxonomy heading
  end

  @product_type = params[:id].split('/').last
  @featured = @taxon_id + '/' + @product_type            #featured image     


  @searcher = Spree::Config.searcher_class.new(params.merge(:taxon => @taxon.id))
  @searcher.current_user = try_spree_current_user
  @searcher.current_currency = current_currency
  @products = @searcher.retrieve_products

  @related_products = @taxon.products.offset(rand(Spree::Product.count - 7)).limit(7)

  respond_with(@taxon)

そしてproducts_controller.rb:

  def show
  return unless @product

  @variants =    @product.variants_including_master.active(current_currency).includes([:option_values, :images])
  @product_properties = @product.product_properties.includes(:property)

  referer = request.env['HTTP_REFERER']
  if referer
    begin
      referer_path = URI.parse(request.env['HTTP_REFERER']).path
      # Fix for #2249
    rescue URI::InvalidURIError
      # Do nothing
    else
      if referer_path && referer_path.match(/\/t\/(.*)/)
        @taxon = Taxon.find_by_permalink($1)
      end
    end
  end

  respond_with(@product)
end
4

0 に答える 0