我是Rails(和编程)的新手,经过一些教程后,我正在设计一个消息传递应用来测试我的技能。
我正在建模的情况是用户可以向2个以上的其他用户发送消息。这是我想出来的
然后是ActiveRecord模型:
class User < ActiveRecord::Base
has_many :messages, :through :conversation
has_many :conversations # or is belongs_to :conversation
end
class Message < ActiveRecord::Base
belongs_to :user
belongs_to :conversation
end
class Conversation < ActiveRecord::Base
has_many :messages
belongs_to :user # or is it has_many :users
end
或者我是否必须添加第4个接口收件箱
class Inbox < ActiveRecord::Base
belongs_to :user
has_many :conversations
end
我会将用户和会话模型更改为
class User < ActiveRecord::Base
has_one :inbox
has_many :conversations, :through :inbox
has_many :messages, :through :conversation
end
class Conversation < ActiveRecord::Base
belongs_to :inbox
has_many :messages
belongs_to :users
end
第二个选项看起来多余。 所以是的,我对谈话和用户之间的关系/关联模糊不清。非常感谢所有启发我的投入。
答案 0 :(得分:0)
我认为你的第一种方式更好,但看起来应该是这样的:
class User < ActiveRecord::Base
has_many :messages
has_many :user_conversations
has_many :conversations, through: :user_conversations
end
class Message < ActiveRecord::Base
belongs_to :user
belongs_to :conversation
end
class Conversation < ActiveRecord::Base
has_many :messages
has_many :user_conversations
has_many :users, through: :user_conversations
end
# join table between users and conversations
class UserConversation < ActiveRecord::Base
belongs_to :user
belongs_to :conversation
end
原因是用户可以进行多次对话,而对话可以有很多用户。您需要创建连接表UserConversation以适应这种情况。
此外,找出哪个模型应该属于另一个模型的最简单方法是询问哪个模型应该具有另一个模型的外键。外键belongs_to
是另一个模型。