2013-04-20 6 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. Если у вас есть действительно mutidimentinal массив, используйте Array#flatten:

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

Я делаю это в модели UserMailer. В качестве необходимости электронной почты cc. Добавлено пользовательское решение в модели UserMailer, но оно дает ошибку «неопределенный метод« кодирование »для # <Массив: 0xacd0528>» для order_controller. В order_controller, UserMailer.welcome_email (current_user, @order) .deliver – user2206724

+0

user2206724, не могли бы вы уточнить вопрос с дополнительной информацией о UserMailer/OrderController? В частности, включите код, который вызывает кодировку 'undefined method 'для # ' – gmile

+0

, добавил UserMailer и ordercontroller, способ, которым он дает ошибку – user2206724

Смежные вопросы