неопределенная локальная переменная или метод - PullRequest
0 голосов
/ 07 февраля 2010

Позвольте мне уточнить мой вопрос. Я пытаюсь получить целочисленное значение из @ student.rooms.last, и не похоже, что только по одному из @ student.rooms.last мне дадут целочисленное значение.

Student.transaction do
if @student.test!
 x = @student.site_id.to_int
 y = @student.rooms.last

book = Book.find(:first, :conditions => ["location_id = ? AND room_id = ?", x, y])

   room = Room.new
   room.student_id = @student.id 
   if room.save
     book.room_id = room.id

Прямо сейчас это возвращает ошибку: у вас есть нулевой объект, когда вы этого не ожидали! Произошла ошибка при оценке nil.room_id = Я пытаюсь найти запись комнаты, связанную с @student, у которой идентификатор равен внешнему ключу book room_id. Спасибо за любой ответ.

1 Ответ

4 голосов
/ 07 февраля 2010

Я предполагаю, что проблема заключается в том, что 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...