2013-04-20 159 views
0

我有一个多维数组:@line_itemsRails:从多维数组创建一维数组

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

我想从@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 

由于foodio为零。

任何机构都可以帮忙吗?

感谢您的阅读!

UPDATE

我UserMailer型号:

class UserMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    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 => ["[email protected]", "#{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 

回答

3

我想这是你想要什么:

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

UPD。如果你有真正的mudidimentinal阵列,使用Array#flatten

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

我这样做在UserMailer模型。需要抄送电子邮件。在UserMailer模型中添加了用户解决方案,但对于order_controller,出现错误“未定义的方法编码”为#。在order_controller中,UserMailer.welcome_email(current_user,@order).deliver – user2206724 2013-04-20 18:40:29

+0

user2206724,能不能更新有关UserMailer/OrderController的其他细节的问题?具体来说,包括为#' – gmile 2013-04-20 18:48:30

+0

'添加UserMailer和订单控制器,它给出了错误 – user2206724 2013-04-20 19:05:21