2011-02-24 176 views
0

嘿, 我試圖實現社交網絡中使用的消息系統。我面臨的問題首先是關於數據庫結構,其次是如何在rails中實現它。
我的第一個想法是我使用3個表:Rails私人消息系統

消息:ID |主題|文| created_at
接收器:ID | MESSAGE_ID |閱讀:布爾
創:ID | MESSAGE_ID |閱讀:布爾

現在我想知道如何實現以下功能:
1)用戶可以刪除他的消息。但是因爲兩者都希望閱讀該消息,所以如何確保只有當兩個用戶都刪除了該消息時纔會刪除該消息。
2.)我如何實現答覆?或者實際上我如何找到相應的創作者?
3.)如何找出郵件是否被接收者讀取?

另一個想法是: creator_messages:ID | creator_id | receiver_id |主題|文|閱讀| created_at receiver_messages:同creator_messages

這種區分之間的用戶,這樣他們就可以單獨刪除他們的消息。但是我怎麼知道郵件是否被讀取?

我的第三種方法基本上是我的第二個,但只有一個表消息,然後顯示給用戶。
1.只要有一個用戶刪除它,郵件就會被刪除。
2.實際上,我如何將關係表示爲has_many並且屬於?

我認爲它會像這樣工作:

model User 
    :has_many :send_messages, :class_name=>"messages", :foreign_key=>"creator_id" 
    :has_many :received_messages, :class_name=>"messages", :foreign_key=>"receiver_id" 
end 

model Messages 
    belongs_to :user 
end 

但不知何故,我沒有得到它的工作。猜我在這裏錯過了一些基本的東西。

希望有人能幫助我=)非常感謝

+0

它應該是':sent_messages',如果其他是':received_messages' :) – 2011-02-24 10:22:55

+0

我沒有嘗試建立一個私人消息系統,但是如果我必須這樣做,我會深入到這個代碼中https://github.com/insoshi/insoshi)或者檢查這個插件:https://github.com/professionalnerd/simple-private-messages(使用Restful Authentication)。希望它可以幫助... – benoitr 2011-02-24 11:28:37

+0

嘿,爲什麼你想要消息模型中的多個創建者的消息,而不僅僅是creator_id? – 2011-02-24 11:33:05

回答

1

好吧,如果我理解正確的消息將有最多1個接收器和1個發件人。 在這種情況下,我會做到以下幾點:

我將只創建一個信息模型,這將有額外的領域 - receiver_read - receiver_deleted - sender_deleted

現在你可以添加掛鉤像模型「after_save」,「after_create」在這裏,你可以通過receiver_read_changed等來檢查receiver_read是否已經被設置爲true。方法,如果這是真的,你可以通知發件人或做一些其他的事情。 有了這個after_save掛鉤,你還可以檢查,如果sender_deleted設置爲true,並且receiver_deleted已經爲true,那麼你將刪除整個消息。

當您有多個接收器時,我會爲接收器創建一個連接模型,並在消息模型中包含sender_deleted和sender_id。 在連接模型中,我將添加列receiver_id,讀取和刪除。 現在,我將在消息和連接模型上使用before_save方法來檢查是否需要刪除消息,或者是否必須通知發件人已讀取消息。

+0

非常感謝這個刪除工作 – Jan 2011-02-24 13:41:56

0

的解決方案可能是:

1)我將創建一個接收器表中刪除(_at)標誌爲好,如果你真的想如果所有的接收器都刪除了它,你可以硬刪除數據庫中的消息,你可以設置一個cronjob或其他東西。

2)在消息模型中有一個creator_id而不是創建者表,我的意思是多個人如何創建相同的消息?

3)我真的沒有得到這個,我猜你設置接收器表上的「讀」標誌爲「真」,當用戶打開信息時,在此之後,你可以在用戶範圍內模型如「scope:read,where(:read,true)」,並且範圍未讀。

我希望這是你的意思。

+0

1)只有一個接收者,但是隻有在兩者都決定刪除時才能刪除該消息2)至少對於第一種方法來說這是真的3)是的,我設置了readflag,但是如何通知創建者該消息是否被讀取? – Jan 2011-02-24 12:22:43