我有Product
has_many :product_attributes
ProductAttribute
的架构如下:
product_id :integer
key :string
value :string
产品属于某个类别,我想要做的是Category.find(1).all_colours
,它会收集所有颜色(.where(key: 'Colour')
),并允许我在列表中通过它们.each
删除和复制。
ProductAttribute
的示例记录是:
颜色:蓝色,绿色,红色,橙色,蓝色
我正在使用以下方法:
def all_colours
products.collect {|p| p.product_attributes.where(key: 'Colour').map(&:value) }.uniq
end
但它返回以下内容:
[["Green, Blue, Red, Orange, Green", "Purple, Teal, Ruby"]]
我希望结果:
以上的正确结果应该是......
['Green', 'Blue', 'Red, 'Teal', 'Ruby', 'Purple']
我希望有人能指出我正确的方向。
提前致谢。
答案 0 :(得分:1)
您可以使用flatten方法将多维数组连接成1个数组
def all_colours
products.collect {|p| p.product_attributes.where(key: 'Colour').map(&:value).split(', ') }.flatten.uniq.join(", ")
end
答案 1 :(得分:0)
products.collect {|p| p.product_attributes.where(key: 'Colour').map(&:value) }.join(', ').split(', ').uniq