2012-10-21 90 views
0

我真的很感謝這方面的幫助。Rails,在視圖中顯示模型的名稱而不是id

我如人際關係:

class User < ActiveRecord::Base 
    has_many :ideas, :class_name => 'Challenge', :foreign_key => 'creator_id' 
    has_many :contributions, :class_name => 'Challenge', :foreign_key => 'contributor_id' 

class Challenge < ActiveRecord::Base 
    belongs_to :creator, :class_name => 'User' 
    belongs_to :contributor, :class_name => 'User' 

我的問題是能夠顯示的名稱,而不是在挑戰模式意見的用戶的ID。

在控制檯我可以分配給@challenge一個挑戰,然後輸入

@challenge.creator.name 

返回的創造者,完美的名稱。但是,當我嘗試把它放在我的視圖中時,它會返回未定義的方法'name'。

我認爲最接近我已經做了正確的事情是讓我挑戰索引視圖的相關部分說的創造者,而不是creator_id:

<tr><% @challenges.each do |challenge| %><tr> 
<td><%= challenge.creator %></td> 

但不是返回的創建者名稱這就是我想要的視圖,它返回以下輸出:

#<User:0x007fe1b81c20b8> 

有誰請解釋爲什麼一個字段顯示這樣的情況以及我如何在我看來,輸出用戶的姓名。

我的挑戰控制器指數動作就是:

@challenges = Challenge.all 

非常感謝你。

+0

只是指出。 「它返回以下輸出:」之後沒有輸出。 –

+0

謝謝! – James

回答

1

我想它必須顯示對象本身。 challenge.creator是對象而不是創建者的名字。

更換

<td><%= challenge.creator %></td> 

隨着

<td><%= challenge.creator.try :name %></td> 
+0

當我這樣做的輸出是:未定義的方法'名稱爲零:NilClass – James

+0

我想我需要改變一些東西,使名稱訪問? – James

+0

您尚未設置挑戰對象的創建者(challenge.creator = user_obj1)。所以,創建者對這個挑戰是零,而零對象沒有名稱方法。​​<%= challenge.creator.try:name%>。試試這個代碼。如果創建者存在,它將提供創建者的名字。否則,它將不會崩潰。 – Nerve

相關問題