检查项目在购物车中

时间:2014-08-01 07:20:02

标签: ruby-on-rails ruby

在我的Rails电子商务网站中,我有这一行:

@cart = Cart.find(session[:cart_id])

如何查看'会话[:cart_id]'在' Cart'在我打电话给这条线之前?

2 个答案:

答案 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?检查持久性