如何在Rails 4中导航关联

时间:2013-10-15 04:47:38

标签: ruby-on-rails ruby ruby-on-rails-4

我很生气,我问这个,因为它应该是显而易见的。但我有些不对劲。我正在尝试在索引中显示引用模型的属性。

Rails 4.0.0
ruby 2.0.0p247

应用程序/模型/ unit.rb

class Unit < ActiveRecord::Base
  belongs_to :building
end

应用程序/模型/ building.rb

class Building < ActiveRecord::Base
  has_many :units
end

在控制台中:

Loading development environment (Rails 4.0.0)
2.0.0-p247 :001 > unit = Unit.find(3)
  Unit Load (4.1ms)  SELECT "units".* FROM "units" WHERE "units"."id" = ? LIMIT 1  [["id", 3]]
 => #<Unit id: 3, number: "APT 10", bed: "2", bath: "2", sqft: "300", amenities: "Stuff", building_id: 3, created_at: "2013-10-15 04:17:45", updated_at: "2013-10-15 04:37:10"> 
2.0.0-p247 :002 > unit.building.street_address
  Building Load (0.5ms)  SELECT "buildings".* FROM "buildings" WHERE "buildings"."id" = ? ORDER BY "buildings"."id" ASC LIMIT 1  [["id", 3]]
 => "4564 Jones Ave" 
2.0.0-p247 :003 > 

在默认的index.html.erb中,只有一处更改:

<% @units.each do |unit| %>
        <tr>
          <td><%= unit.number %></td>
          <td><%= unit.bed %></td>
          <td><%= unit.bath %></td>
          <td><%= unit.sqft %></td>
          <td><%= unit.amenities %></td>
          <td><%= unit.building.street_address %></td>
          <td><%= link_to 'Show', unit %></td>
          <td><%= link_to 'Edit', edit_unit_path(unit) %></td>
          <td><%= link_to 'Destroy', unit, method: :delete, data: { confirm: 'Are you sure?' } %></td>
        </tr>
      <% end %>

我做的唯一改变是添加“.street_address”。如果我添加它我得到一个错误,street_address不是一个定义的方法。如果我将其移除,导轨将清楚地显示该装置已连接到建筑物。我该怎么办?

2 个答案:

答案 0 :(得分:1)

请注意,如果您的数据库中有孤立的unit条记录(即没有相应的building条记录),则可能会出现此类错误。

答案 1 :(得分:0)

如果没有看到错误,也许try会有效吗?像这样使用它:

<td><%= unit.building.try(:street_address) %></td>