2013-05-13 110 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