Reputation: 13
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
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