所以我在rails应用程序中构建了一个产品系统和一个购物车,并且我使用Devise进行用户身份验证。这些有3个型号。产品,推车和用户模型。
我的目标是将购物车中保存的产品与用户模型中的列相关联。如果用户在购物车中有三个带有ID 1,2,3的产品并点击了" Save"购物车中的按钮,这些产品的ID(整数)应保存在用户字符串列中。
我怎样才能做到这一点?
答案 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