【发布时间】:2015-10-16 07:01:42
【问题描述】:
我最近将我的数据库从 sqlite3 更改为 Postgres,因此我可以将它启动到 Heroku。因此,我对我的数据库和 Gemfile 进行了所有更改,然后启动了。 Heroku 应用运行良好,但是当我返回本地分支时,我触发了此错误。
ActiveRecord::RecordNotFound in Devise::SessionsController#new
找不到 'id'=2 的订单
def current_order
if !session[:order_id].nil?
Order.find(session[:order_id])
else
Order.new
end
这让我感到困惑,因为 a) Heroku 应用程序再次运行良好。 b)因为条件清楚地表明,如果订单 id 为 nil,则它应该只创建一个新订单。如果找不到id,为什么会发疯? 如您所见,我正在使用设计。这是我与购物车相关的模型:
class CartsController < ApplicationController
def show
@order_items = current_order.order_items
end
end
class OrderItemsController < ApplicationController
def create
@order = current_order
@order_item = @order.order_items.new(order_item_params)
@order.save
session[:order_id] = @order.id
end
def update
@order = current_order
@order_item = @order.order_items.find(params[:id])
@order_item.update_attributes(order_item_params)
@order_items = @order.order_items
end
def destroy
@order = current_order
@order_item = @order.order_items.find(params[:id])
@order_item.destroy
@order_items = @order.order_items
end
private
def order_item_params
params.require(:order_item).permit(:quantity, :subproduct_id)
end
end
还有模特:
class Order < ActiveRecord::Base
belongs_to :order_status
has_many :order_items
before_create :set_order_status
before_save :update_subtotal
def subtotal
order_items.collect { |oi| oi.valid? ? (oi.quantity * oi.unit_price) : 0 }.sum
end
private
# Sets order status of 1, in progress.
def set_order_status
self.order_status_id = 1
end
def update_subtotal
self[:subtotal] = subtotal
end
end
class OrderItem < ActiveRecord::Base
belongs_to :subproduct
belongs_to :order
validates :quantity, presence: true, numericality: { only_integer: true, greater_than: 0 }
validate :subproduct_present
validate :order_present
before_save :finalize
# Will use the associated subproduct's price if the order item is not persisted
def unit_price
if persisted?
self[:unit_price]
else
subproduct.price
end
end
def total_price
unit_price * quantity
end
private
def subproduct_present
if subproduct.nil?
errors.add(:subproduct, "is not valid or is not active.")
end
end
def order_present
if order.nil?
errors.add(:order, "is not a valid order.")
end
end
def finalize
self[:unit_price] = unit_price
self[:total_price] = quantity * self[:unit_price]
end
end
class OrderStatus < ActiveRecord::Base
has_many :orders
end
提前谢谢你。
【问题讨论】:
-
您的本地数据库中是否有
Order和id = 2的记录? -
感谢您的回复。控制台告诉我我没有。但我不明白为什么它甚至应该搜索它。
-
这是因为在您的
order_items表中可能有order_id = 2的记录。请检查。
标签: ruby-on-rails devise shopping-cart