如何解决Rails 3以has_many关系合并相似的实例
| 我有两个模型。订单和line_item。class Order < ActiveRecord::Base
has_many :line_items
has_many :products,:through => :line_items
end
class LineItem < ActiveRecord::Base
belongs_to :order
belongs_to :product
end
line_items
包含以下属性-:product_id
,:size
,:quantity
。
对于相同的产品和尺寸,一个订单可能有多个line_item,在这种情况下,我希望能够访问合并成一个的line_item,并且数量为全部的总数。例如,一个订单可能具有以下line_items:
# | product_id | size | quantity
1 | 1 | small | 1
2 | 1 | small | 2
3 | 1 | medium | 1
4 | 2 | small | 1
应该合并到:
# | product_id | size | quantity
1 | 1 | small | 3
2 | 1 | medium | 1
3 | 2 | small | 1
在我看来,这应该是订购模型上的作用域或类方法,这很自然,因此我可以从视图中调用@order.line_items_merged
或类似的东西,但是我不确定如何实现它。有人可以帮忙吗?
解决方法
同一对(产品,尺寸)对具有多个订单项真的有意义吗?您实际上会单独使用它们还是将它们合并使用?
就我个人而言,我会考虑更改逻辑,以便同一商品和尺寸不能有多个订单项(即直接增加数量,而是创建要合并的多个记录),从而避免出现该问题!
,好的,为什么要将ѭ1分组为一个虚拟实体?
对我来说,似乎更容易在
Order
类中创建遍历line_items
并获取所需数据的方法/范围。再次不确定您的最终目标是什么。
Order
班:
def qty
line_items.map{|li| li.quantity}.sum
end
def sizes
line_items.map{|li| li.size}.uniq
end
如果订单已加载到内存中的非常简单的示例-希望有帮助。
如果需要数据库搜索/排序,则可以在lib目录中定义一个line_items模块,然后直接从多个line_items
调用中调用方法...对\'Orders \'也可以这样做
因此,extend
您的模型关联声明:
has_many :line_items,:extend => LineItemsMethods,:dependent => :destroy
LineItemsMethods
课:
def any_special_products?
any? {|line_item| line_item.special_method}
end
范围当然也可以工作...试图保持简单,希望可以帮上忙。
编辑
我完全错过了示例中的第二行,其中一个line_item
的数量为2。因此,我同意第一个答案:如果您要让用户输入数量,则可以再次选择相同的产品。它应该只更新现有数量,而不管是否已保存...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。