2010-02-07 93 views
0

让我澄清我的问题。我试图从@ 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关联的房间记录,该记录的id等于book_id外键。感谢您的回应。

+1

为什么你只是为了得到最后一个元素而遍历'@ student.rooms'?我的意思是,为什么你不能直接得到最后一个元素? – 2010-02-07 20:05:12

+0

如果您不告诉Rails您想要订购的物品,您是否从列表中选择“第一个”或“最后一个”有什么区别? – 2010-02-07 22:19:40

回答

5

我想象的是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 ...不,等等。该代码应该返回倒数第二本书,对吧?只有当学生拥有数据库中的第一本书时?

Bah,不管。只需使用经典的ActiveRecord方法即可。

相关问题