-1

私はRailsアプリケーションの支払いにStripeを使用していますが、上記のエラーが発生しました。私は最近、私のコードの大きな塊を私のコントローラからモデルに移しました。これが私がこのエラーに遭遇したのは初めてです(前に支払いをテストしたことがありません)。なぜこれが今起きているのか分かりません。Rails/Stripe - 未定義メソッド `stripe_token 'for nil:NilClass

は、ここに私のモデルのコードです -

Booking.rb

class Booking < ActiveRecord::Base 

    belongs_to :event 
    belongs_to :user 

    def reserve 
    # Don't process this booking if it isn't valid 
    return unless valid? 

    # We can always set this, even for free events because their price will be 0. 
    self.total_amount = quantity.to_i * event.price_pennies.to_i 

    # Free events don't need to do anything special 
    if event.is_free? 
     save 

    # Paid events should charge the customer's card 
    else 
     begin 
     charge = Stripe::Charge.create(amount: total_amount, currency: "gbp", card: @booking.stripe_token, description: "Booking number #{@booking.id}", items: [{quantity: @booking.quantity}]) 
     self.stripe_charge_id = charge.id 
     save 
     rescue Stripe::CardError => e 
     errors.add(:base, e.message) 
     false 
     end 
    end 
    end 
end 

そして、私のコントローラで -

bookings_controller.rb

def create 
    # actually process the booking 
    @event = Event.find(params[:event_id]) 
    @booking = @event.bookings.new(booking_params) 
    @booking.user = current_user 

     if @booking.reserve 
      flash[:success] = "Your place on our event has been booked" 
      redirect_to event_path(@event) 
     else 
      flash[:error] = "Booking unsuccessful" 
      render "new" 
     end 
    end 

ここでエラーメッセージだ -

Error message

は、私はRailsのにかなり新たなんだ、これは簡単なようであれば謝罪ので、任意の助けいただければ幸いです。

+0

実際にエラーメッセージが表示されることがありますので、どのコード行が表示されているのかわかりますか?それがモデルファイル内にある場合、begin/rescueブロックでは、@ bookingオブジェクトを定義した場所は表示されません。 –

+0

エラーメッセージが追加されました。 –

答えて

1

@bookingは、コントローラ/ビューのコンテキストでのみ使用可能なインスタンス変数です。 reserveはモデルのインスタンスメソッドであるため、selfまたは何も指定しない、つまり@booking.method =>self.methodまたはmethodを参照するだけです。

+0

だから、私は 'total_amount'または 'self.total_amount'を入れるだけですか? –

+0

これは正しい –

関連する問題