在我的Rails电子商务网站中,我有这一行:
@cart = Cart.find(session[:cart_id])
如何查看'会话[:cart_id]'在' Cart'在我打电话给这条线之前?
答案 0 :(得分:1)
find
方法用于使用主键检索对象。如果它不存在,您将收到ActiveRecord::RecordNotFound
错误。
这背后的逻辑是,在大多数情况下,如果你有主键,那么对象应该存在。您仍然可以执行以下操作:
begin
@cart = Cart.find(session[:cart_id])
#work with the cart
rescue
#do something if not found
end
但这不应该是一种常见的情况。
答案 1 :(得分:1)
您可以使用过滤器:
class MyController
before_filter :set_cart, on: [:my, :list, :of, :actions]
private
def set_cart
begin
@cart = Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound => e
@cart = Cart.new
end
end
end
这样,@cart
始终返回Cart
个对象,您可以通过@cart.persisted?
和@cart.new_record?
检查持久性