<% @purchased.each do |sale| %>
Receipt | <%= link_to sale.product.title, pickup_path(sale.guid) %>
<% end %>
结果是
Receipt | A1 |
Receipt | B1 |
Receipt | A2 |
Receipt | B2 |
Receipt | A1 |
Receipt | B1 |
而不是
Receipt | A1 |
Receipt | B1 |
Receipt | A2 |
Receipt | B2 |
我被告知使用array=array.uniq,但我不确定如何在代码中实现它。
最佳答案
使用uniq
例如:
<% @purchased.uniq.each do |sale| %>
如果它是我的代码库,我宁愿在控制器中执行
uniq
,例如:@purchased_uniq = @purchased.uniq
或者,如果你不需要其他@购买的物品,那么我会用破坏性的“!”来做控制器方法,例如:
@purchased.uniq!
如果@purchased数组包含不同对象的对象(例如模型),但某些对象与同一产品关联,并且您希望基于该产品执行
uniq
,则可以使用块,例如:@purchased.uniq!{|obj| obj.product }
或按标题:
@purchased.uniq!{|obj| obj.product.title }
你要注意这类代码,因为这类代码很容易引起错误,比如一个用户为同一产品购买了多个产品。我建议编写测试代码,专门涵盖拥有多个相同产品的用户。此外,您可能希望确保每个产品都有一个唯一的标题,例如使用数据库约束(并且可以选择rails模型验证唯一性)。
关于ruby-on-rails - 如何删除“.each do”中的重复元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30418373/