首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于数据库- Rails 4中库存可用性的动态下降

基于数据库- Rails 4中库存可用性的动态下降
EN

Stack Overflow用户
提问于 2014-06-09 09:04:37
回答 3查看 156关注 0票数 0

我正在创建一个电子商务网站,我有一个“大小”下降为客户选择他们的大小。我想要的是下降到只显示根据数据库中持有的“股票”值可用的大小。

有人有这样做的经验或有任何见解吗?

模式中的“尺寸”表

代码语言:javascript
复制
create_table "sizes", force: true do |t|
    t.integer  "product_id"
    t.integer  "stock"
    t.string   "size"
    t.datetime "created_at"
    t.datetime "updated_at"
end

Size.rb

代码语言:javascript
复制
class Size < ActiveRecord::Base

    belongs_to :product
end

Order_Product.rb

代码语言:javascript
复制
class OrderProduct < ActiveRecord::Base

  belongs_to :order
  belongs_to :product
  belongs_to :size
end

Product.rb

代码语言:javascript
复制
class Product < ActiveRecord::Base

    has_many :order_products
    has_many :orders, through: :order_products
    has_many :sizes
end

product/show.html.erb

代码语言:javascript
复制
<%= simple_form_for :basket, url: product_basket_path(@product), remote: true do |f| %>

<%= f.input :quantity, as: :select, collection: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], selected: 1, required: false %>

<%= f.input :size, as: :select, collection: @product.sizes, selected: 0, required: false %>

<%= f.button :submit, "Add to basket" %>

<% end %>

非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-09 09:25:54

向您的大小模型添加一个作用域,并使用它填充select字段。

范围:

代码语言:javascript
复制
class Size < ActiveRecord::Base

  belongs_to :product

  scope :in_stock, where('stock > 0')

end

选择字段:

代码语言:javascript
复制
<%= f.input :size, as: :select, collection: @product.sizes.in_stock, selected: 0, required: false %>

在视图中使用作用域而不是过滤,可以让您在其他地方重用in_stock作用域,并执行一个SQL查询,而不是加载所有记录并遍历所有记录。

票数 3
EN

Stack Overflow用户

发布于 2014-06-09 09:24:05

我希望我能准确地理解您想要做的事情;您应该能够使用pluck选择所有可用的大小值,如下所示:

代码语言:javascript
复制
@product.sizes.where('stock >= 1').pluck(:size, :id)

编辑:参见道格拉斯F希勒的文章,这个范围比仅仅将Ruby代码放在视图中要优雅得多!

票数 1
EN

Stack Overflow用户

发布于 2014-06-09 14:29:26

从道格拉斯的回答中得到灵感,我发现以下几点值得我去做。

Product.rb

代码语言:javascript
复制
class Product < ActiveRecord::Base

    has_many :order_products
    has_many :orders, through: :order_products
    has_many :sizes

    def in_stock
        self.sizes.where('stock > 0')
    end
end

product/show.html.erb

代码语言:javascript
复制
<%= f.input :size, as: :select, collection: @product.in_stock, selected: 0, required: false %>

谢谢你的帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24116946

复制
相关文章

相似问题

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