0

我需要使用用户消息(对话框)构建应用程序。我已经通过这种方式解决了这个问题:

应用程序/模型/conversation.rb

class Conversation < ActiveRecord::Base
  belongs_to :user
  belongs_to :interlocutor
  has_many :messages
end

应用程序/模型/message.rb

class Message < ActiveRecord::Base
  belongs_to :conversation
  belongs_to :user
  attr_accessible :message
end

应用程序/模型/user.rb

class User < ActiveRecord::Base
  ...
  def conversations
    Conversation.uniq.joins(:messages)
      .where("conversations.user_id = ?", self.id)
      .where("conversations.interlocutor_id = ?", self.id)
      .order("messages.created_at DESC")
  end
end

我对对话方法感到困惑。这就像 PHP 方式 - 没有灵活性。

它可以通过rails方式重写吗?也许它可以是AR关系?

谢谢。

4

2 回答 2

2

考虑确定查询范围。

在 Rails 3 中,这看起来像

class Conversation < ActiveRecord::Base
  scope :involving, lambda do |user|
    joins(:messages)
      .where("conversations.user_id = ?", user.id)
      .where("conversations.interlocutor_id = ?", user.id)
      .order("messages.created_at DESC")
  end
end

像这样使用它:

Conversation.involving(me).all
于 2012-07-03T17:32:06.277 回答
2

为什么 aUser没有很多Conversations?这对我来说最有意义...

class User < ActiveRecord::Base
  ...
  has_many :conversations
end

此外,您已经说过a Conversation belongs_toa User!你没有完成这段感情的另一半...

于 2012-07-03T14:57:05.173 回答