2013-04-20 134 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