2009-09-23 64 views
0

我有一個用戶索引,其中顯示用戶名,用戶位置和一個名爲categories的字段,其範圍可以從零到多個項目。我無法正確顯示類別。這裏是我的個人資料:Rails - 從連接表中調用列的問題

用戶
has_many :user_categories
has_many :categories, :through => :user_categories

分類
has_many :user_categories
has_many :users, :through => :user_categories

User_categories
belongs_to :user
belongs_to :category

在我的user_categories表中,有三列:id,user_id,category_id。
在我的分類表中,有兩列:id和name。

在我的用戶/索引視圖,我有以下幾點:

<% @users.each do |user| %> 
    <%= link_to user.name, user %> 
    <%=h user.state %> 
    <%=h user.categories %> ## This line is the problem 
<% end %> 

在那裏我已經指出,直接上面我的意見的問題,我已經嘗試了多種變化,但不知何故,我很想念它。以下是我嘗試過的變體以及它們產生的結果。請注意,對於測試,用戶#2是唯一一個應該顯示的類別。

<%=h user.categories %>  

顯示:#<Category:0x3f40634>
日誌顯示:
UserCategory Load (0.4ms) SELECT * FROM "user_categories" WHERE ("user_categories".user_id = 2)

Category Load (0.4ms) SELECT "categories".* FROM "categories" INNER JOIN "user_categories" ON "categories".id = "user_categories".category_id WHERE (("user_categories".user_id = 2))

<%=h user.categories.name %> <-- Here I added .name at the end of the call 

顯示:category
日誌顯示:應用程序不會做一個類別負荷。

<%=h user.user_categories %> 

顯示:#<UserCategory:0x3e4d1a0>
日誌顯示:UserCategory Load (0.4ms) SELECT * FROM "user_categories" WHERE ("user_categories"."user_id" = 2) AND ("user_categories".user_id = 2) LIMIT 1
沒有做一個類別負荷。

<%=h user.user_categories.find_by_user_id(user.id) %> 

產生與上述相同的結果。

基於此,我認爲<%= h user.categories%>是最有意義的,但我嘗試了每個我能想到的變體,它們都會拋出異常。

回答

2

模型定義看起來正確。你可能想檢查你的數據庫,以確保你已經使用適當的約定你的ID。我擔心你試圖在「問題行」中顯示所有類別。嘗試遍歷它們:

<% @users.each do |user| %> 
    <%= link_to user.name, user %> 
    <%=h user.state %> 
    <%=user.categories.each do |c| %> 
    <%h c.name%> 
    <%end%> 
<% end %> 
+0

工作。任何想法爲什麼我以前的方法不起作用?我不確定我是否明白問題所在。 – MikeH 2009-09-23 02:55:18

+1

這個答案是正確的錢。 僅僅是持有@用戶類別的Array對象的字符串表示形式。 – hgmnz 2009-09-23 02:57:18

+0

查看我的答案進一步解釋 - 它不適合評論。 – 2009-09-23 03:13:30

1

您遇到的問題是,在這三種情況下,你試圖顯示或ActiveRecord對象的集合操作。<%= h user.categories %><%= h user.user_categories %>將在集合上顯示調用to_s的結果,從而給出您記下的輸出(#<Category:0x3f40634>#<UserCategory:0x3e4d1a0>)。 <%= h user.categories.name%>將顯示在類別關聯上調用name的結果。

jrhicks的答案有效,因爲他遍歷了類別並打印出每個類別的名稱。有關類似示例,請參閱http://guides.rubyonrails.org/getting_started.html#hooking-comments-to-posts - 在這種情況下,他們遍歷帖子的評論。

+0

謝謝。欣賞後續行動。 – MikeH 2009-09-23 03:16:43