Spree Commerce:关联购物车中的订单项?
Spree Commerce: Associate line items in the cart?
我正在编写一个 Spree 扩展,以允许 cart/order 中的某些项目相互链接。
"setting" 产品可以与 "center stone" 产品相关联。最终,应该有约束来强制哪些事物可以相互引用,但这还不重要。
以下是我如何更改 LineItem 以包含自我引用:
Spree::LineItem.class_eval do
has_one :center_stone, class_name: "LineItem", foreign_key: "setting_id"
belongs_to :setting, class_name: "LineItem"
end
...以及相应的数据库迁移:
class AddSettingRefToLineItems < ActiveRecord::Migration
def change
add_reference :spree_line_items, :setting, index: true, foreign_key: true
end
end
接下来我需要完成的是修改产品页面上的 "Add to Cart" 表单,以便添加到购物车的商品可以与购物车中已有的商品相关联。我该怎么做?
用例示例
产品 A 和产品 B 都在我的购物车中。我正在查看产品 C 的页面。我想查看选项:
- 添加到产品 A
- 添加到产品 B
- 单独添加到购物车
单击这些选项中的任何一个都会像往常一样为产品 C 创建 Spree::LineItem。如果单击前两个选项,我还希望产品 C 的 LineItem setting_id 引用我购物车中产品 A 的 LineItem。
据发现,主要问题是:如何自定义 Spree 的 "add to card" 功能。
您需要customize views:
Deface::Override.new(:virtual_path => 'spree/products/_cart_form',
:name => 'centerproduct_cart_form',
:replace => "<what to replace>",
:erb => "<with what to replace>")
这应该转到您的 app/overrides/centerproduct_cart_form.rb
文件(您可以更改文件名,只需确保上面代码示例中的 name
参数也将更改为相同的值)。
你可以通过查看视图的源代码来找出what to replace
和with what to replace
部分:
https://github.com/spree/spree/blob/master/frontend/app/views/spree/products/_cart_form.html.erb
我正在编写一个 Spree 扩展,以允许 cart/order 中的某些项目相互链接。
"setting" 产品可以与 "center stone" 产品相关联。最终,应该有约束来强制哪些事物可以相互引用,但这还不重要。
以下是我如何更改 LineItem 以包含自我引用:
Spree::LineItem.class_eval do
has_one :center_stone, class_name: "LineItem", foreign_key: "setting_id"
belongs_to :setting, class_name: "LineItem"
end
...以及相应的数据库迁移:
class AddSettingRefToLineItems < ActiveRecord::Migration
def change
add_reference :spree_line_items, :setting, index: true, foreign_key: true
end
end
接下来我需要完成的是修改产品页面上的 "Add to Cart" 表单,以便添加到购物车的商品可以与购物车中已有的商品相关联。我该怎么做?
用例示例
产品 A 和产品 B 都在我的购物车中。我正在查看产品 C 的页面。我想查看选项:
- 添加到产品 A
- 添加到产品 B
- 单独添加到购物车
单击这些选项中的任何一个都会像往常一样为产品 C 创建 Spree::LineItem。如果单击前两个选项,我还希望产品 C 的 LineItem setting_id 引用我购物车中产品 A 的 LineItem。
据发现,主要问题是:如何自定义 Spree 的 "add to card" 功能。
您需要customize views:
Deface::Override.new(:virtual_path => 'spree/products/_cart_form',
:name => 'centerproduct_cart_form',
:replace => "<what to replace>",
:erb => "<with what to replace>")
这应该转到您的 app/overrides/centerproduct_cart_form.rb
文件(您可以更改文件名,只需确保上面代码示例中的 name
参数也将更改为相同的值)。
你可以通过查看视图的源代码来找出what to replace
和with what to replace
部分:
https://github.com/spree/spree/blob/master/frontend/app/views/spree/products/_cart_form.html.erb