Rails:从多维数组创建一维数组

时间:2013-04-20 18:20:52

标签: arrays ruby-on-rails-3

我有一个多维数组:@line_items

它与模特,产品和用户有链接。

我想从@line_items生成一个包含用户电子邮件的单维数组。

这样的事情:

 emails = @line_items.product.user.email

但它不起作用并给出错误:

 undefined method `user' for #<Array:0xb1a12e74>

对于单行line_item,它可以正常工作。

 email = @line_item.product.user.email

我尝试生成这样的数组:

    @line_items.each do |i|
        @foodio.each do |j|
            @foodio[j] = i.product.user.email
        end
    end

但它给出了

   undefined method `each' for nil:NilClass

因为食物是零。

任何人都可以帮忙吗?

感谢阅读!

更新

我的UserMailer模型:

class UserMailer < ActionMailer::Base
  default :from => "email@mealnut.com"

  def welcome_email(user, order)
@user = user
    @order = order
    @line_items = @order.line_items
    @foodio = @line_items.map do |line_item|
  line_item.product.user.email
end   

    mail(:to => user.email, :cc => ["care@mealnut.com", "#{foodio}"], :subject => "Order no. #{order.id}")
   end

  end

订单控制器:

 def process_order
   @order = current_order
   @line_items = @order.line_items
    if @line_items.size > 0
         session[:order_id] = nil
         UserMailer.welcome_email(current_user, @order).deliver
    else
      render :action => "cart"
   end

 end

1 个答案:

答案 0 :(得分:4)

我认为这就是你想要的:

array_of_emails = @line_items.map do |line_item|
  line_item.product.user.email
end

<强> UPD 即可。如果你有真正的mutidimentinal数组,请使用Array#flatten

my_array = [ [1,2], [3,4], [5,6] ]
my_array.flatten # => [ 1, 2, 3, 4, 5, 6 ]