变量的值 - 零?

时间:2011-11-17 15:18:10

标签: ruby-on-rails-3

看起来我在我的应用程序中收到的错误是由于@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
  1. 这是否真的意味着由于某种原因@ad被作为nill传递给视图?
  2. 我的逻辑在这里有什么问题吗? (newbe)

2 个答案:

答案 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.nameputs @ad.inspect in console,您会看到自己的价值