0

我正在开发具有 Mongodb 的 Rails 应用程序。我的模型包含一个投资组合类,它有一个名为文件夹的数组字段。我在应用程序控制台中执行此操作

@portfolio=Portfolio.last

我得到这个回报:
#"Folder 1", "stocks"=>[{"name"=>"Atul auto", "id"=>"stock id1", "qty"=>"10"}]}, {"name"=>nil, "stocks"=>[{"name"=>"Caner fill", "id"=>"stock id2", "qty"=>"15"}]}]>

但是当我在我的控制器中使用它并在视图中使用实例变量时,我得到了这个返回:
Portfolio:0x007ff97802cff0
每次我刷新页面时,这个数字都会不断变化。如果我使用它
@portfolio=Portfolio.all.to_a
,我会在控制台的视图中获得相同的回报。任何猜测。

4

2 回答 2

1

当你执行

@portfolio = Portfolio.last

@portfolio 是一个 Portfolio 对象(您可以通过调用@portfolio.class 在控制台中对其进行验证)。您可以通过调用@portfolio.to_s 来获取该对象的地址,这将与您获得的输出相匹配,这表明您在视图中的@portfolio 对象上隐式调用to_s。

相反,如果您调用@portfolio.inspect,您将获得类似于您首先显示的输出。@portfolio.inspect 返回一个字符串。因此,您可以在视图中使用 @portfolio.inspect 来生成类似于您尝试生成的输出。

如果你调用 Portfolio.all,你会得到一个 Mongoid 选择器。Portfolio.all.to_a 将使用该选择器将 Portfolio MongoDB 集合中的所有条目加载到一个数组中。Portfolio.all.to_a.to_s 将产生类似的输出,但引号已转义。因此,在视图中,对 to_a 的隐式 .to_s 调用在视图中产生与控制台中类似的输出。

于 2013-08-17T06:14:21.563 回答
1

您不能直接输出一个类型的对象。, 如果你这样做,你会得到对象的地址。你需要在你的视图中做这样的事情:

<%= @portfolio.stocks.name %>
于 2013-08-17T05:42:20.730 回答