无需将它们与特定产品相关联
这让我很困惑——您肯定想将选择框与特定产品的选项相关联吗?
我个人会确保设置“购买流程”以在整个过程中传递产品 ID。我会通过在路线中使用嵌套资源来做到这一点:
#config/routes.rb
resources :products do
get :step2 #-> /products/1/step2
end
这将params[:product_id]
通过该过程,允许您在下一步中使用它:
#app/controllers/products_controller.rb
def step2
@product = Product.find(params[:product_id])
end
#app/views/products/step2.html.erb
<%= collection_select(:product, :size_id, @product.size, :id, :name, prompt: true) %>
看过之后,我认为您真正的问题是将您size
作为字符串存储在Product
模型中。我会创建一个名为 的单独模型sizes
,然后使用一个名为 的连接模型products_sizes
来允许您将所需的任意数量的尺寸与每个产品关联起来。然后您就可以调用关联数据
为什么不这样做:
#app/models/product.rb
Class Product < ActiveRecord::Base
has_many :product_sizes
has_many :sizes, through: :product_sizes
end
#app/models/size.rb
Class Size < ActiveRecord::Base
has_many :product_sizes
has_many :products, through: :product_sizes
end
#app/models/product_size.rb
Class ProductSize < ActiveRecord::Base
belongs_to :product
belongs_to :size
end
这允许您存储许多不同产品的尺寸,允许您从模型中选择 ID ProductSize
,直接在您的购物车模型中引用它们:
#app/models/cart.rb
Class Cart < ActiveRecord::Base
belongs_to :user
belongs_to :product
belongs_to :product_size
end
#carts
id | user_id | product_id | product_size_id | created_at | updated_at
这意味着如果您创建一个新的购物车项目,您将能够直接将 a 分配给product
记录size
:
<%= collection_select(:product, :product_size_id, @product.sizes, :id, :name, prompt: true) %>