商品、カートなどのeコマースウェブサイトがあります。Rails:商品はゼロに設定されています
@produitと@produitsの両方の変数はnilに設定されていますが、理由はわかりません。ここ
はproduit.rb
次のとおりです。ここ
class Produit < ActiveRecord::Base
has_many :order_items
default_scope { where(active: true) }
mount_uploader :photo, PhotoUploader
validates :nom, presence: true
validates :artisan, presence: true
validates :quantite, presence: true
validates :categorie, presence: true
validates :denomination, presence: true
validates :description, presence: true
validates :prix, presence: true
validates :photo, presence: true
end
はコントローラです:
class ProduitsController < ApplicationController
def index
@produits = Produit.all
@order_item = current_order.order_items.new(produit_params)
if @order_item.save
format.html { redirect_to @order_item, notice: 'Le produit a été ajouté au panier !' }
format.json { render json: @order_item, status: :created, location: @order_item }
format.js
else
format.html { render action: 'create', notice: 'Le produit n\'a pas été ajouté au panier' }
format.json { render @order_item.errors, status: unprocessable_entity }
format.js
end
end
def show
@produit = Produit.find(params[:id])
end
private
def produit_params
params.require(:produit).permit(:nom, :quantite, :description, :denomination, :artisan, :categorie, :prix, :photo)
end
end
私もproduits /インデックスにこのビューを持っている:
<%= render partial: 'layouts/navbarindex' %>
<%= render partial: 'produits/header' %>
<div id="path-progress-bar">
<p>Accueil</p>
<p>/</p>
<p style="color:black">Boutique de produits breton</p>
</div>
<section id="marche-breton-container">
<%= render template: 'categories/index' %>
<div id="produits-column-container">
<% if @produits %>
<% @produits.in_groups_of(4, false).each do |g| %>
<% g.each do |produit| %>
<%= render partial: "produits/produit_row", produit: @produit, order_item: @order_item %>
<% end %>
<% end %>
<% end %>
</div>
</section>
、ここでは、レンダラ_produit_row.html.erb
です:
<div id="produits-row-container">
<div id="fiche-produit-container">
<%= form_for order_item, remote: true do |f| %>
<div id="produit-img">
<%= link_to produits_show_path do %>
<%= image_tag produit.photo %>
<% end %>
</div>
<div id="produit-nom">
<%= produit.nom %>
</div>
<div id="produit-prix">
<%= number_to_currency(produit.prix, unit: '€', format: "%n%u") %>
</div>
<div id="produit-au-panier">
<%= image_tag('icon/icon-panier') %>
<%= f.submit 'Ajouter au panier' %>
</div>
<% end %>
</div>
</div>
問題はビューが何も表示されないよう@produit
と@produits
が、私は製品が設定されているactive_adminセッションを持っているにもかかわらず、nilに設定されていることです。
UPDATE:logs
:
Started GET "/mon-marche-breton" for ::1 at 2017-05-24 09:17:47 +0200
Processing by MarcheBretonController#index as HTML
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 ORDER BY `users`.`id` ASC LIMIT 1
Rendered layouts/_cart_text.html.erb (6.9ms)
Rendered layouts/_navbarindex.html.erb (26.4ms)
Rendered produits/_header.html.erb (3.4ms)
Categorie Load (0.3ms) SELECT `categories`.* FROM `categories`
Rendered categories/index.html.erb (5.5ms)
Rendered produits/index.html.erb (39.2ms)
Rendered marche_breton/index.html.erb within layouts/application (40.3ms)
Rendered layouts/_footer.html.erb (3.2ms)
Completed 200 OK in 253ms (Views: 242.1ms | ActiveRecord: 3.6ms)
Started GET "/assets/bg/bg-banner.png" for ::1 at 2017-05-24 09:17:48 +0200
Started GET "/assets/bg/footer.png" for ::1 at 2017-05-24 09:17:48 +0200
Started GET "/assets/bg/before-footer.png" for ::1 at 2017-05-24 09:17:48 +0200
「Produit.all」がデータを取得していることを、レールコンソールにチェックインしましたか?また、保存した商品には、「アクティブ:true」という属性がありますか? 'default_scope {where(active:true)}'を覚えておいてください。 –
'Produits#index'は、' OrderItem'のためのパラメータを受け取るべきではありません。それはGET要求でなければなりません。 '@ order_item.save'条件を' OrderItems'コントローラに移すことを考えてください(恐らく 'create'アクションの中に)。 – coreyward
@AlejandroMontillaはい、私はレールコンソールをチェックし、Produit.allは私のactive_adminセッションで入力したデータを取得しています。それが私が理解していない理由です... – justinedps26