我需要使用用户消息(对话框)构建应用程序。 我通过这种方式解决了这个问题:
应用/模型/ 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关系?
感谢。
答案 0 :(得分:2)
为什么User
的{{1}}有很多Conversations
?这对我来说最有意义......
class User < ActiveRecord::Base
...
has_many :conversations
end
此外,您已经说过 Conversation
belongs_to
一个User
!你没有完成另一半的关系......
答案 1 :(得分:2)
考虑scoping查询。
在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