首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择产品的属性,如大小/颜色,而不创建处理它们的模型

选择产品的属性,如大小/颜色,而不创建处理它们的模型
EN

Stack Overflow用户
提问于 2008-11-09 16:28:15
回答 4查看 4.6K关注 0票数 3

我刚学习了Rails第三版的敏捷Web开发(第三版),我正在浏览Depot应用程序章节,我有一个关于产品/项目选项的问题。

如果我想修改产品目录和存储,使产品可以有选择(大小,颜色,任何东西),我将在哪里/如何做到这一点?

假设我在卖t恤衫,它们有不同的尺码。我不觉得这真的需要一个模型来处理大小,所以我想我可以把它作为一个选择框添加到商店视图中的html中。

但是,每个additional按钮都由一个由button_to自动生成的表单标记包装,并且似乎无法将其他参数传递给我的购物车。如何将项目的大小添加到add_to_cart中?

在我看来,帮手:

代码语言:javascript
复制
<%= button_to "Add to Cart" , :action => :add_to_cart, :id => product %>

它生成的表格:

代码语言:javascript
复制
<form method="post" action="/store/add_to_cart/3" class="button-to">
EN

回答 4

Stack Overflow用户

发布于 2008-11-11 04:28:00

好吧,两天后,我想明白了。我不得不这么做-

1 .在我的商店里:

代码语言:javascript
复制
<% form_for @product, :url => {:action => "add_to_cart", :id => @product} do |f| %>
  <select name="productsize" id="productsize">
    <option value="L">L</option>
    <option value="XL">XL</option>
  </select>
  <%= f.submit 'Add to Cart' %>
<% end %>

2,添加到我的商店管理员:

代码语言:javascript
复制
productsize = params[:productsize]
@cart.add_product(product, productsize)

必须从params获得产品大小,然后将其与产品模型的其余部分传递给cart模型的add_product操作。

3 .调整cart模型以接受论点,并:

代码语言:javascript
复制
@items << CartItem.new(product, productsize)

将其与产品模型的其余部分一起传递,以创建一个新的购物车项目并将其添加到项中。

4 .添加到cart_item模型中:

代码语言:javascript
复制
attr_reader :product, :quantity, :productsize

def initialize(product, productsize)
@product = product
@productsize = productsize

若要读取产品大小并初始化购物车项目,请执行以下操作。

5,添加到我的add_to_cart视图中:

代码语言:javascript
复制
Size: <%=h item.productsize %>

若要为用户显示它,请执行以下操作。

就这样。如果有一种更简单的或DRYer的方式去做,我都是耳朵(眼睛?)

票数 4
EN

Stack Overflow用户

发布于 2008-11-10 16:37:50

我不知道您为什么不存储大小,除非您的意思是您将存储大小作为cart_item的一部分,而不是产品,这是很好的。在这种情况下,你会做这样的事情:

代码语言:javascript
复制
<% form_for(@cart_item) do |f| %>
<%= f.select :size, ['S', 'M', 'L', 'XL', 'XXL'] %>
<%= f.hidden_field :product_id, :value => @product.id %> 
# other properties...
<%= f.submit 'Add to Cart' %>
<% end %>
票数 1
EN

Stack Overflow用户

发布于 2008-11-09 16:34:58

我会删除button_to助手并使用适当的表单,将产品属性提交给add_to_cart操作。

代码语言:javascript
复制
<% form_for(@product) do |f| %>
<%= f.select :size, ['S', 'M', 'L', 'XL', 'XXL'] %>
# other properties...
<%= f.submit 'Add to Cart' %>
<% end %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/276072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档