2013-05-13 109 views
0

我有两个模型。 首先是事件和第二城市。在事件表中,我有一个名为city_id的列。 我想在每个事件显示视图上显示城市名称。Ruby on Rails 2个模型之间的关系输出

在事件控制器:

@city = City.where(:id => @event.city_id) 

并在视图:

<%= @city.name %> 

一个城市有许多事件和事件属于城市。

我认为的输出只是城市这个词。

嗯,错误在哪里?

回答

1

更改您的代码从:

@city = City.where(:id => @event.city_id) 

到:

@city = @event.city 

除了比必要的时间,原来的代码实际上返回一个ActiveRecord::Relation对象 - 延迟加载查询 - 为城市的集合。调用@city.name正在获得该关系的类名 - 这是“城市”。 ;)

@city = City.where(:id => @event.city_id).first 

但如上所述,这比需要的多了很多代码:如果添加.first触发查询,得到的第一个记录它会正常工作。当然,这是假设您在Event类中设置了belongs_to :city语句。

+0

'City.where(...)'返回一个范围,正式名称为'ActiveRecord :: Relation'。它必须像你说的那样用'.first'实现。 – tadman 2013-05-13 18:34:09

+0

非常感谢。这很容易使用它。我喜欢它复杂;) – pkberlin 2013-05-13 18:57:36