проблема зацикливания и литья в рельсах - PullRequest
0 голосов
/ 29 августа 2010

У меня есть следующий метод в User модель

  def get_employees
    @employees = []
      groups.each do |i|
        @employees << Group.find(i).employees
      end
      @employees
  end  

Это то, что консоль печатает, когда я вызываю этот метод:

> >> User.find(4).get_employees
> => [[#<Employee id: 4, first_name: "test", last_name: "test1",
> email_address: "test@gmail.com",
> created_at: "2010-08-25 04:23:02",
> updated_at: "2010-08-25 04:23:02">,
> #<Employee id: 5, first_name: "hello", last_name: "hello1", email_address:
> "hello@gmail.com", created_at:
> "2010-08-25 04:51:37", updated_at:
> "2010-08-25 04:51:37">]]

однако, следующий код делаетне работает:

>> @user.get_employees.each{|i| p i.first_name}
NoMethodError: undefined method `first_name' for #<Class:0x9e372f0>

Что мне нужно сделать, чтобы получить first_name из employees из цикла?

Ответы [ 3 ]

0 голосов
/ 29 августа 2010

Вызов Group.find(i).employees возвращает массив, поэтому ваш метод get_employees возвращает массив массивов.Замена последней строки get_employees на @employees.flatten! должна помочь.

0 голосов
/ 29 августа 2010

Как отметил предыдущий автор, у вас есть массив внутри массива. Зачем воссоздавать какую-то логику, которая уже встроена в рельсы? Я бы сделал что-то подобное в пользовательской модели:

class User < ActiveRecord::Base
  has_many :groups
  has_many :employees, :through => :groups
end

Тогда вы можете просто сделать User.employees

0 голосов
/ 29 августа 2010

Мне кажется, что переменная i все еще является массивом.Вы объявляете @employee как пустой массив и вставляете другой массив, который возвращается Group.find (i) .employees.

i [0] должен содержать:

#<Employee id: 4, first_name: "test", last_name: "test1",
> email_address: "test@gmail.com",
> created_at: "2010-08-25 04:23:02",
> updated_at: "2010-08-25 04:23:02">,
> #<Employee id: 5, first_name: "hello", last_name: "hello1", email_address:
> "hello@gmail.com", created_at:
> "2010-08-25 04:51:37", updated_at:
> "2010-08-25 04:51:37">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...