rails 3 найти одну запись из активной коллекции записей

Я использую рельсы v3.0.9

Я не могу понять, как использовать метод поиска в коллекции активных записей.

Что я пробовал в своей консоли,

@customers = Customer.all       # returns collection of records

@customer = @customers.find {|customer| customer.id == 1 } # returns the correct record

Теперь я использую тот же метод поиска в коллекции ассоциаций.

@projects = @customer.projects # returns collection of Project records

@project = @projects.find {|project| project.id == 1 }  # got error
    ActiveRecord::RecordNotFound: Couldn't find Project with ID=1...

Пожалуйста, объясните, чем метод find отличается от двух приведенных выше примеров

Есть ли другой способ найти запись в коллекции ассоциаций?

Я использовал обнаружение массива, чтобы получить запись о проекте.

@project = @projects.detect {|project| project.id == 1 }    # returns the correct record

Какой метод лучше всего найти одну запись из массива активных записей?


person nishanthan    schedule 03.08.2013    source источник


Ответы (2)


Просто сделайте это:

@customer = Customer.find(customer_id)

Например:

@customer = Customer.find(1)
# => will return the customer with the id equal to 1
person Pierre-Louis Gottfrois    schedule 03.08.2013

У вас есть несколько возможностей:

# this returns the customer with the id 1 - if a customer with id 1 exists!
@customer = Customer.find(1)
@customer = Customer.where(:id => 1).first

# this returns the project with id 1 and customer_id = @customer.id
@customer.projects.find(1)
@customer.projects.where(:id => 1).first

Ваша ошибка просто означает, что у вас нет проекта с id = 1 и customer_id = @customer.id

Чтобы ответить на ваш вопрос... вы должны использовать запросы where... это новый путь рельсов 3. Все методы find устарели в rails 4 и извлечены из ядра rails в дополнительный драгоценный камень.

person Matthias    schedule 04.08.2013
comment
Это нормально, но предложение Model.find и Model.where выполнит запрос к базе данных, где методы поиска и обнаружения массива вернут объект через итерацию (без запроса), поэтому я пробую методы массива - person nishanthan; 05.08.2013
comment
Что ты имеешь в виду? Если у вас есть сохраненные объекты в базе данных, вам всегда нужно запрашивать их, чтобы получить их из вашей базы данных :-).. - person Matthias; 05.08.2013
comment
Предположим, что у нас есть минимум записей в таблице (5 записей) и мы хотим сохранить каждый объект в отдельной переменной для дальнейшего расчета, лучше всего использовать методы поиска и обнаружения массива вместо ActiveRecord, где и найти. Например, stackoverflow.com/questions /17503221/ - person nishanthan; 05.08.2013