Ruby on rails 简单消息系统的当前会话逻辑
我正在用Rails3构建一个简单的消息传递系统,允许用户彼此发送私人消息。每组用户之间可以有单个消息流(如短信) 然而,我对用于构建显示用户当前所有对话的视图的逻辑感到困惑。这包括可能只包含我发送的消息的对话 我的模式具有以下特性:Ruby on rails 简单消息系统的当前会话逻辑,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,我正在用Rails3构建一个简单的消息传递系统,允许用户彼此发送私人消息。每组用户之间可以有单个消息流(如短信) 然而,我对用于构建显示用户当前所有对话的视图的逻辑感到困惑。这包括可能只包含我发送的消息的对话 我的模式具有以下特性: create_table "messages", :force => true do |t| t.integer "from_id" t.integer "to_id" t.string "message" t.da
create_table "messages", :force => true do |t|
t.integer "from_id"
t.integer "to_id"
t.string "message"
t.datetime "created_at"
t.datetime "updated_at"
end
我想模拟类似于FB消息的东西,它为每个对话显示一行`
任何想法都会非常有用
谢谢!
Danny有两组消息需要考虑:
- 其中
是当前用户from\u id
- 其中
是当前用户to_id
chatting_with = User.find_by_sql(%Q{
select * from users where id in (
select to_id as user_id from messages where from_id = :the_user
union all
select from_id as user_id from messages where to_id = :the_user
)
}, :the_user => the_user_in_question.id)
SQL联合只是对两个结果集进行集合式联合,因此上面将抓取问题中的用户向其发送消息的所有用户,并将其与向问题中的用户发送消息的用户相结合;结果将是所有与问题中的用户进行对话的用户,作为一组用户实例。由于工会中有一个,因此您可以使用UNION ALL来避免工会中的一些额外工作
您可能希望将其包装在消息的类方法中:
def self.conversations_involving(user)
User.find_by_sql(%Q{
select * from users where id in (
select to_id as user_id from messages where from_id = :the_user
union all
select from_id as user_id from messages where to_id = :the_user
)
}, :the_user => user.id)
end
然后你可以这样说:
@other_users = Message.conversations_involving(current_user)
在你的控制器里
您还需要将索引添加到数据库中的消息、from\u id
和消息、to\u id
。是否可以将jquery ui选项卡栏与。然后你可以使用like来发送消息。在javascipt中,您可以获得传入的消息,用新的对话启动一个新选项卡!我在这里看不到任何问题,只是对设计理念的要求。无论如何,您可能希望向模型中添加一个线程id,因为两个人可以同时进行两次不同的对话。