2016-04-01 13 views
0

のように継承しているこんにちは私はユーザーがチェックアウトしているときに私のウェブサイトで問題になってきました。ユーザーが作成またはサインインすると、すべてのユーザーにカートが表示されます。アプリケーションコントローラに含まれているセッションヘルパー内のcurrent_userのインスタンスです。ユーザーは、彼らが彼らのカート内の項目を配置した後、私は「#のために未定義のローカル変数やメソッド 『CURRENT_USER』」のエラーを参照してください彼らの順序を置くことになるとこれは注文モデルであるコードです未定義のローカル変数またはメソッドの `current_user 'を

def add_line_items_from_cart(cart) 
    current_user.cart.line_items each do |item| 
     item.cart_id = nil 
     line_items << item 
    end 

私は私はcurrent_user.cartが動作していると思ったので、少し混乱しました。ここ は私の受注コントローラ

class OrdersController < ApplicationController 
    include CurrentCart 
    before_action :set_cart, only: [:new, :create] 
    before_action :set_order, only: [:show, :edit, :update, :destroy] 

    def new 
    if current_user.cart.line_items.empty? 
     redirect_to root_path, notice: "Your cart is empty" 
      return 
     end 
     @order = Order.new 
    end 

    def create 
    @order = Order.new(order_params) 
    @order.add_line_items_from_cart(@cart) 

    respond_to do |format| 
     if @order.save 
     current_user.cart.destroy 
     session[:cart_id] = nil 

     format.html { redirect_to root_path, notice: 
       'Thank you for your order.'} 
     format.json { render action: 'show', status: :created, 
       location: @order} 
     else 
      format.html {render action: 'new'} 
      format.json {render json: @order.errors, 
       status: :unprocessable_entity} 
     end 
    end 
    end 
    private 
    def order_params 
    params.require(:order).permit(:name, :address, :email, :pay_type) 
    end 
end 

、これはそれが非常に参考になる機能しない理由誰も私に説明することができた場合は、ユーザーが注文

<%= form_for(@order) do |f|%> 
<% if @order.errors.any?%> 
    <div id="error_explanation"> 
    <h2> <%= pluralize(@order.errors.count, "error")%> 
     prohibited this order from being saved:</h2> 
     <ul> 
     <% @order.errors.full_messages.each do |msg| %> 
     <li><%= msg%></li> 
     <%end%> 
     </ul> 
    </div> 
    <%end%> 

    <div class="field"> 
     <%= f.label :name %><br> 
     <%= f.text_field :name, size: 40%> 
    </div> 
    <div class="field"> 
     <%= f.label :address %><br> 
     <%= f.text_area :address, rows: 3, cols: 40%> 
    </div> 
    <div class="field"> 
     <%= f.label :email %><br> 
     <%= f.email_field :email, size: 40%> 
    </div> </div> 
    <div class="field"> 
     <%= f.label :pay_type %><br> 
     <%= f.select :pay_type, Order::PAYMENT_TYPES, 
       prompt: 'Select a payment method'%> 
     </div> 
     <div class="actions"> 
     <%= f.submit 'Place Order' %> 
     </div> 
     <%end%> 

を配置することができたときのための部分的な私のためです。

+1

Deviseを使用していますか? current_userはコントローラでのみ利用可能なデバイスヘルパーです –

+0

いいえ私はbcryptを使用しています自分で現在のユーザメソッドを作成しました – Dan

答えて

2

アプリケーションコントローラに含まれるセッションヘルパー内のcurrent_userのインスタンスです。

あなたのモデルレイヤでは、その部分は利用できません。あなたのモデルはコントローラ変数やヘルパーにアクセスできません。モデルレイヤー内にcurrent_userを使用することはできません。具体的には、そのメソッドをパラメータとして渡すことはできません。

+0

私のエラーが見つかりました。助けてくれてありがとう – Dan

関連する問題