Tau
Tau

Reputation: 13

Ruby undefined method `user' for nil:NilClass

I'm following tutorials from tuts+ about building rails store, but I got error. I was checking my ode for a several times, but nothing. Thank for helping

My order_controller.rb (line 21 - error)

class OrdersController < ApplicationController
before_filter :initialize_cart

def create
    @order_form = OrderForm.new(
        user: User.new(order_params[:user]),
        cart: @cart
    )

    if @order_form.save
        notify_user
        redirect_to root_path, notice: "Thank you for placing the order."
    else
        render "carts/checkout"
    end
end

private

def notify_user
    @oder_form.user.send_reset_password_instructions
    OrderMailer.order_confirmation(@order_form.order).deliver
end

def order_params
    params.require(:order_form).permit(
        user: [ :name, :phone, :address, :city, :country, :postal_code, :email ]
    )
end

end

order.rb

class Order < ActiveRecord::Base
  belongs_to :user
  has_many :order_items

  def total_price
    order_items.inject(0) { |sum, item| sum + item.total_price }
  end
end

order_form.rb

class OrderForm
include ActiveModel::Model

attr_accessor :user, :order
attr_writer :cart

def save
    set_password_for_user

    if valid?
        persist
        true
    else
        false
    end
end

def has_errors?
    user.errors.any?
end 

private

def valid?
    user.valid?
end

def persist
    user.save
    @order = Order.create! user: user

    build_order_items
end

def set_password_for_user
    user.password = Digest::SHA1.hexdigest(user.email + Time.now.to_s)[0..8]
end

def build_order_items
    @cart.items.each do |item|
        @order.order_items.create! product_id: item.product_id, quantity: item.quantity
    end
end

end

order_confirmation.text.erb

Hello <%= @order.user.name %>,

Order id #<%= @order.id %>

<%- @order.items.each do |item| %>
* <%= item.quantity %> <%= item.product.name %> (<%= number_to_currency item.total_price %>)
<%- end %>

Total: <%= number_to_currency @order.total_price %>

Upvotes: 1

Views: 75

Answers (1)

Luis Menjivar
Luis Menjivar

Reputation: 777

You wrote in line 21 @oder_form.user.send_reset_password_instructions should be @order_form.user.send_reset_password_instructions you are missing an r in order

Upvotes: 2

Related Questions