2017-05-23 1 views
0

商品、カートなどの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 
+0

「Produit.all」がデータを取得していることを、レールコンソールにチェックインしましたか?また、保存した商品には、「アクティブ:true」という属性がありますか? 'default_scope {where(active:true)}'を覚えておいてください。 –

+2

'Produits#index'は、' OrderItem'のためのパラメータを受け取るべきではありません。それはGET要求でなければなりません。 '@ order_item.save'条件を' OrderItems'コントローラに移すことを考えてください(恐らく 'create'アクションの中に)。 – coreyward

+0

@AlejandroMontillaはい、私はレールコンソールをチェックし、Produit.allは私のactive_adminセッションで入力したデータを取得しています。それが私が理解していない理由です... – justinedps26

答えて

0

問題はここにある:

<% @produits.in_groups_of(4, false).each do |g| %> 
     <% g.each do |produit| %> 
      <%= render partial: "produits/produit_row", produit: @produit, order_item: @order_item %> 

あなたが収集@produitsを反復してproduitに、コレクションの各単一インスタンスを割り当てます。したがって、部分produit: @produitを渡すと、実際にはnilを渡します。

これを解決するには、@を削除し、正しくスコープを設定してください。そのほかに:)

<% @produits.in_groups_of(4, false).each do |g| %> 
     <% g.each do |produit| %> 
      <%= render partial: "produits/produit_row", produit: produit, order_item: @order_item %> 

私はあなたの部分でproduits_show_pathがそのように動作しないことを前提としています。

link_to produit_path(produit) do 

私はこれが助けてくれることを願っています!

+0

をレンダリング '_produit_row.html.erb'部分から来ている知っている、' @のproduits'も皆無です。私はあなたが提案したことをやろうとしましたが、うまくいきません。 – justinedps26

+0

ああ、大丈夫。まず、あなたのDBに 'Produit'があることを確かめてください。あなたはそれがインデックスビューをレンダリングしていますことを確認できるように、それに加えて、あなたのインデックスメソッドから '@もしorder_item.save'の部分を削除してください(また、他のケースを削除します)。私はこの条件のために実際にあなたの望みのビューを描画していないと思います。 –

+0

'Produit'がDBにあります。私は 'if @ order_item.save'ステートメント(' else'ケースも)を削除して何も変わりません。私はこれをさらにデバッグする '宝石pry'を使用してみてください、あなたが – justinedps26

関連する問題