为什么Rails在我的页面上显示内存地址?

时间:2011-08-26 08:16:03

标签: ruby-on-rails-3

我的观点:

<h1><%= @territory.name %></h1>
<%= link_to 'List of Territories', territories_path %>
<%= render 'shared/address_form' %>
<table>
  <tr>
    <td><strong>Name</strong></td>
    <td><strong>Street</strong></td>
    <td><strong>District</strong></td>
    <td><strong>Note</strong></td>
  <tr>

  <%= @addresses.each do |address| %>
  <tr>
    <td><%= address.name %></td>
    <td><%= address.street %></td>
    <td><%= address.district %></td>
    <td><%= address.note %></td>
  </tr>
  <% end %>
</table>

我在这里呈现的表格是:

<%= form_for [@territory, @new_address] do |f| %>
<div>
  <p>
    <%= f.label :address %><br />
    <%= f.text_area :address %>
  </p>
</div>
<div class='file-wrapper'>
  <%= f.submit "Submit" %>
</div>
<% end %>

这是区域控制器,其中定义了实例变量地址:

class TerritoriesController < ApplicationController
  def index
    @territories = Territory.all
  end

  def show
    @territory = Territory.find(params[:id])
    @new_address = @territory.addresses.build
    @addresses = @territory.addresses
  end
  .
  .
  .

为什么Rails显示

#<Address:0x7e088224>#<Address:0x7e0881d4>#<Address:0x7e088134>#<Address:0x7e088094>#  <Address:0x7e087ff4>#<Address:0x7e087f54>#<Address:0x7e087eb4>#<Address:0x7e087e14>#<Address:0x7e087d74>#<Address:0x7e0bce48>

表格之后和表格之前?

由于 托马斯

4 个答案:

答案 0 :(得分:2)

检查您的布局(app / views / layouts / *)。很可能您在使用显示这些地址的页面呈现的ERB代码中包含了一些ERB代码。这是您的观点的完整代码吗?

编辑:我找到了你的解决方案。现在,你有<%= @addresses.each ... %>。每个方法在所有元素上运行块,然后返回元素列表。您不希望显示此代码。移除=,以便<%=只是<%

答案 1 :(得分:2)

您在某处(在布局或视图助手中)有一些隐式调用to_s模型实例的Address方法的视图代码。寻找类似<%= @address %>的内容。

如您所见,to_s方法的非重写行为是输出对象实例的内存地址。

答案 2 :(得分:2)

那些不是内存地址。这些是您的Address类的实例。如果您覆盖该类中的to_s方法,则会在那里看到输出。您看到这些对象打印出来的原因是您使用<%=。改变这一行

<%= @addresses.each do |address| %>

到这个

<% @addresses.each do |address| %>

应该修复它。

答案 3 :(得分:0)

首先:我认为你看不到任何形式。 第二:你的观点看起来不错。

查看布局文件。