0

ユーザーメッセージ(ダイアログ)を使用してアプリを作成する必要があります。私はこの方法でこの問題を解決しました:

app / models / conversation.rb

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

app / models / message.rb

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

app / models / 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の方法のようなもので、柔軟性はありません。

レールで書き換えることはできますか?多分それはAR関係である可能性がありますか?

ありがとう。

4

2 に答える 2

2

なぜUser多くないのConversationsですか?それは私にとって最も理にかなっています...

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

さらに、あなたはすでにConversation belongs_toそれを言ったUser!あなたは関係の残りの半分を完了しませんでした...

于 2012-07-03T14:57:05.173 に答える
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 に答える