看起来我在我的应用程序中收到的错误是由于@ad对象以某种方式变为零而引起的。我目前唯一想到的是逐步查看rails控制台中发生的事情。 这是控制器的代码:
def edit
@ad=Ad.find(params[:id])
end
首先,如果@ad = Ad.find(params [:id])确实有效,我想检查rails控制台。 所以我输入控制台
@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: "dawn@hotmail....", img_url: "http://www.freewebsit...", created_at: nil, updated_at: nil>"
好的,这一步有效。 我想要做的下一步是看看如果在屏幕上打印@ad会发生什么 - 这样我就能看到传递给视图的确切内容。 我输入'print @ad,这是给出的输出:
irb(main):025:0> print @ad
#<Ad:0x40be700>=> nil
irb(main):026:0> puts @ad
#<Ad:0x40be700>
=> nil
答案 0 :(得分:0)
当您运行print @ad
时,Rails实际上会调用print @ad.to_s
(将广告转换为字符串)。您需要在广告模型中定义.to_s
方法
class Ad < ActiveRecord::Base
def to_s
name
end
end
或者如果您只是在调试:
print @ad.inspect
答案 1 :(得分:0)
#<Ad:0x40be700>
表示这是一个active_record哈希。
如果您puts @ad.name
或puts @ad.inspect in console
,您会看到自己的价值