2010-02-07 99 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方法即可。

相關問題