我是红宝石的新手。我有一个循环,我想创建一个数组:
@line_items.each do |i|
if @line_items[0].product.user.email == i.product.user.email
@foodio = i.product.user.email
else
@foodio[i] = i.product.user.email
end
end
在上面的代码中,我正在检查line_items是否为不同的用户。
在第一部分中,如果所有line_items都有相同的用户,则电子邮件将为@foodio。 但如果用户不同,@ food []将存储所有用户的电子邮件。
怎么做?请帮忙!
答案 0 :(得分:1)
有多种方法可以做到这一点,但最容易分解为步骤。
首先,您可以使用map
方法将line_items数组转换为电子邮件字符串数组:
emails = @line_items.map { |item| item.product.user.email }
(假设产品或用户没有零值)。
您可能在此列表中有重复项,因此您可以使用uniq
方法重复删除:
emails = emails.uniq
或只是
emails.uniq!
然后你可以应用关于所有电子邮件相同的逻辑(因为在这种情况下,列表将只包含一个项目):
@foodio = emails.count == 1 ? emails[0] : emails
答案 1 :(得分:1)
@foodio = @line_items.map{ |ln| ln.product.try(:user).try(:email) }.compact.uniq
遍历项目并选择用户邮件。删除零可能性的紧凑方法(没有产品的用户或没有电子邮件的用户)。最后,uniq方法删除重复项。
在此选项中,@ food始终是一个数组
如果您在模型中验证了状态,只需:
@foodio = @line_items.map{ |ln| ln.product.user.email }.uniq