0

私は多次元配列を持っています: @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

foodioはゼロです。

ここで体を助けることができますか?

読んでくれてありがとう!

アップデート

私の 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
4

1 に答える 1

4

これがあなたが望むものだと思います:

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

UPD。本当に複数の配列がある場合は、次を使用しますArray#flatten

my_array = [ [1,2], [3,4], [5,6] ]
my_array.flatten # => [ 1, 2, 3, 4, 5, 6 ]
于 2013-04-20T18:23:18.610 に答える