未定义的局部变量或方法

时间:2010-02-07 20:03:07

标签: ruby-on-rails ruby

让我澄清一下我的问题。我试图从@ 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对象!评估nil.room_id =时发生错误 我正在尝试找到与@student关联的房间记录,其id等于book room_id外键。谢谢你的回复。

1 个答案:

答案 0 :(得分:4)

我认为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只会是该学生最后一本书的ID,如果学生拥有5本书ID 1-4 ......不,等等。该代码应该返回倒数第二本书,对吧?只有学生拥有数据库中的第一本书?

呸,无论如何。只需使用经典的ActiveRecord方法。