2012-04-24 55 views
0

我有一個用戶模型和消息模型。我的用戶has_many消息和我的消息belongs_to用戶。rails,檢索除了外鍵以外的另一個用戶對象

對我的消息模型,我有屬性:content,:user_id,:to_id。

:user_id充當外鍵,也可以認爲是'發送者',而:to_id可以被認爲是'接收者'。 to_id和:

在我的郵件索引模板,當我嘗試顯示所有的消息,我這樣做...

<%= link_to message_item.user.name, message_item.user %> 

該行顯示我收到信息時(如即時通訊的偉大工程:然而,當im在我的「已發送」類別下列出消息時,執行上面的代碼行將始終顯示我的名字(因爲im:user_id),而不是:to_id ,這會更有意義。

理想我想是這樣

<%= message_item.to_id %> 

我送類別。有沒有辦法讓我的:to_id類別中提到的用戶對象? 類似message_item.to_id.name的東西不起作用,因爲message_item.to_id返回一個整數而不是用戶對象。有沒有辦法得到它?

在試圖顯示並鏈接到發送者,這裏是我的失敗嘗試

<% if current_user == message_item.user %> 
    <%= message_item.to_id %> 
    <% else %> 
     <%= link_to message_item.user.name, message_item.user %> 
    <% end %> 

感謝

回答

2

你需要做的是定義message.rb爲接收器的關係:

belongs_to :to, 
    :class_name => 'User', 
    :foreign_key => :to_id 

我發現如果你把to_id這樣的東西叫做to_user_id,通常會更清楚,所以很清楚你是ta愛上一個用戶而不是別的。

現在,您可以撥打:

<%= link_to(message.to.name, message.to) %> 
+0

嗯它說未定義的方法'爲」爲#<消息:0x007fda730952b8> hmmmm – Sasha 2012-04-24 03:30:31

+0

嗯它似乎無法找到方法名或者 – Sasha 2012-04-24 03:32:35

+0

啊,對不起,在我的例子中,我把它叫做'receiver'而不是'to' 。 – tadman 2012-04-24 05:12:14

1

這是有趣的,我今天回答了類似的問題。

首先,you must set your Message and User models like this

因此,對於您發送的郵件,你可以使用:

<%- current_user.messages.each do |message| -%> 
    <%= link_to message.recipient.name, user_path(message.recipient) %> 
<%- end -%> 

而對於收到的消息:

<%- current_user.messages_received.each do |message| -%> 
    <%= link_to message.user.name, user_path(message.user) %> 
<%- end -%> 

這應該是足夠的。

+0

感謝一堆!有趣的代碼。我會再考慮一下=)我非常感謝幫助 – Sasha 2012-04-24 07:09:50

相關問題