让我澄清一下我的问题。我试图从@ 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外键。谢谢你的回复。
答案 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方法。