2011-11-17 41 views
1

它看起來像我在我的應用程序中收到的錯誤是由@ad對象以某種方式變爲零的事實引起的。我現在唯一想到的就是逐步瞭解Rail控制檯中正在發生的事情。 這是從控制器代碼:我想在軌控制檯檢查@廣告= Ad.find(PARAMS [:編號])變量的值 - 無?

def edit 
    @ad=Ad.find(params[:id]) 
end 

所以第一步實際工作。 所以我在控制檯

@ad=Ad.find(id=5) 

輸入和接收輸出

" ←[1m←[36mAd Load (0.0ms)←[0m ←[1mSELECT "ads".* FROM "ads" WHERE "ads"."id" = ? LIMIT 1←[0m [["id", 5]] 
=> #<Ad id: 5, name: "Door curtain", description: "Beaded door cu...", price: #<BigDecimal:40be0e8,'0.11E2',4(8)>, selle 
r_id: 773, email: "[email protected]", img_url: "http://www.freewebsit...", created_at: nil, updated_at: nil>" 

OK,這一步工作。 我想要做的下一步是看看如果@ad被打印在屏幕上會發生什麼 - 這樣我就能夠看到傳遞給視圖的確切內容。 我輸入「在這個印刷@ad是給定的輸出:

irb(main):025:0> print @ad 
#<Ad:0x40be700>=> nil 
irb(main):026:0> puts @ad 
#<Ad:0x40be700> 
=> nil 
  1. 是否真的意味着由於某種原因@ad爲nill的觀點是通過呢?
  2. 我的邏輯有問題嗎? (newbe)
+0

另外,你最後一行在控制檯讀取'nil'的原因不是因爲對象是零,而是因爲'puts'的返回值是'零'。 –

回答

0

當您運行print @ad Rails實際上調用print @ad.to_s(將廣告轉換爲字符串)。您需要在廣告模式

class Ad < ActiveRecord::Base 
    def to_s 
    name 
    end 
end 

來定義.to_s方法或者,如果你只是調試:

print @ad.inspect 
0

#<Ad:0x40be700>意味着這一個active_record哈希值。 如果你puts @ad.nameputs @ad.inspect in console,你會看到你的值

+0

明白了。非常感謝。 – Elijah