我该如何关联这些模型

时间:2016-06-08 09:14:17

标签: ruby-on-rails

所以我在rails应用程序中构建了一个产品系统和一个购物车,并且我使用Devise进行用户身份验证。这些有3个型号。产品,推车和用户模型。

我的目标是将购物车中保存的产品与用户模型中的列相关联。如果用户在购物车中有三个带有ID 1,2,3的产品并点击了" Save"购物车中的按钮,这些产品的ID(整数)应保存在用户字符串列中。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

HABTM = has_and_belongs_to_many
HABTMT = has_many trough:(has_and_belongs_to_many_through)

您需要在用户和购物车之间建立HABTM关联。 虽然我不打算使用HABTM,因为我个人并不喜欢它。我相信HABTMT总是更合适。

class User
  has_one :cart
  has_many :products, though: :cart
end

class Product
  has_one :cart
end

class Cart
  belongs_to :user
  belongs_to :product

  validates_uniqueness_of :user, scope: :product # ensure a User can only have one product
end

此外,您从HABTMT获得的优势是您可以在模型中添加一个额外的列,其中包含诸如产品数量,折扣代码等信息。

修改

有关与产品/用户关联进行交互的可能性之一的示例。

这实际上取决于您计划如何在产品和用户之间设计用户交互。 例如,如果您决定向CartController添加发送和AJAX请求的Add to Cart按钮, / cart / new / product / 32你可能有这样的new函数:

def new
  @cart = Cart.new
end

def create
  @cart = Cart.new(cart_params).merge({ user_id: current_user.id, product_id: params[:product_id] })
end

def cart_params
  params.require(:cart).permit(
    :user_id,
    :product_id
  )
end