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