2012-08-29 75 views
0

我正嘗試使用TrainingSession模型中的最新活動創建一個活動源。Rails 3如何訪問belongs_to中user_id列的用戶數據:用戶關聯

class User 
    has_many :training_sessions 
end 

class TrainingSession 
    belongs_to :user 
end 

的問題是,我試圖通過實例從TrainingSessions數據庫表的對象以訪問視圖頁面(主要是用戶的名稱)用戶的數據,如下圖所示:

<% @training_sessions.each do |training_session| %> 
<%= training_session.user_id %> 

問題是,雖然我順利拿到了用戶的ID,我不能打電話,例如:

training_session.user_id.name 

...否則我得到如下所示的NoMethodError:

undefined method `first_name' for 2:Fixnum 

所以我的問題是...我如何從TrainingSession的對象訪問用戶的數據?

任何幫助將不勝感激。漂亮的難住這一個。

回答

3

你得到一個「未定義的方法名」爲nil:NilClass「的原因 - 錯誤是某些培訓課程不屬於用戶。解決的辦法是清理你的數據庫:

如果預期的行爲有不屬於用戶的培訓課程,你必須檢查該用戶是不是nil在循環:

<% @training_sessions.each do |training_session| %> 
    <% unless training_session.user.nil? %> 
    <%= training_session.user.name %> 
    <% end %> 
<% end %> 
+0

明白了,謝謝。是的,我需要檢查用戶不是零,因爲它是預期的行爲。 – kwyoung11

1

首先,您需要將您的型號名稱(TreningSessions)重命名爲單數名稱(TreningSession)。這是會議鐵軌的用途。只重命名模型,請保留has_many而不作更改。

現在用戶關聯,您應該通過user對象調用它。 user_id只是表示數據庫中字段的屬性,它是值,而user是一個關聯對象。試試這個:

training_session.user.name

More on ActiveRecord relations

+0

感謝您的快速回復。我試過,但後來我得到這個錯誤:未定義的方法名稱爲Nil:NilClass。我假設這意味着它無法找到用戶?我認爲這是非常重要的,這不是一個傳統的查看頁面,其中的用戶ID在url中。我在我的主頁上顯示這個,所以我不確定導軌是否有訪問用戶的方法? – kwyoung11

+0

已更新的答案。 –

+0

對不起,這實際上是一個錯字。儘管如此,您的解決方案對我仍然無效,而且我認爲這可能是因爲我的應用程序中的網址沒有傳入user_id,因爲活動源位於我的主頁上。上面提出了一個解決方案。 – kwyoung11

0

這裏是我落得這樣做,創建包含USER_ID和使用變量與用戶模型find方法本地用戶變量來實例化一個實例變量@training_session_user在我的控制器,如下所示:

@training_sessions.each do |training_session| 
    user = training_session.user_id 
    @training_session_user = User.find(user) 
end 

然後我在我看來稱之爲:

@training_session_user.first_name 

並且它檢索沒有錯誤的名稱。

如果有人有更好的解決方案,請不要猶豫,但我會將此標記爲現在正確。

+1

這是一個非常糟糕的方式來做到這一點。你應該可以做'training_session.user.name'。如果您遇到錯誤,則意味着某些培訓課程不屬於用戶。請參閱下面的答案。 – Mischa

相關問題