Я предполагаю, что проблема заключается в том, что z существует только в области видимости блока и должен быть определен снаружи.
rooms = @student.rooms
z = nil
rooms.each do |room|
if room.id == @student.rooms.length - 1
z = room.id
end
end
book = Book.find(:first, :conditions => ["room_id = ?", z])
Правда, почему ты не делаешь:
book = @student.rooms.last.books.first
? Из моего смутного понимания вашего сценария кажется, что это одно и то же.
И кажется, что ваш код сломался бы, если бы книги принадлежали учащимся, отличным от вашей первой, поскольку @student.rooms.length - 1
будет идентификатором только последней книги этого ученика, если, скажем, у студента было 5 книг с идентификаторами 1 -4 ... нет, подожди. Этот код должен возвращать вторую книгу, верно? И только если студенту принадлежат самые первые книги в базе данных?
Бах, что угодно. Просто используйте классические методы ActiveRecord.