我尝试创建的状态将包含创建状态的用户和状态所在的用户。
非常类似于"标记"有人在facebook帖子中。我需要创建帖子的用户是所有者,但我还需要找出一种方法将状态所关联的用户与实际状态相关联。
最终目标是显示某个用户的所有状态。
我有一个状态类。
class Status < ApplicationRecord
belongs_to :user
validates :content, presence: true,
length: { minimum: 2}
validates :user_id, presence: true
end
我还有一个用户类
class User < ApplicationRecord
rolify
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates :first_name, presence: true
validates :last_name, presence: true
validates :profile_name, presence: true, uniqueness: true,
format: {
with: /\A[a-zA-Z0-9_-]+\z/,
message: 'Must be formatted correctly'
}
has_many :statuses
end
我原本想添加
has_one :user
到我的状态类,但我现在意识到这不是最好的实现。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:4)
用户应该能够创建多个状态并在单个状态下标记多个用户,这是有道理的。因此,您应该使用has_many
,而不是has_one
。
至于使用同一个类创建多个关联:
class Status < ApplicationRecord
belongs_to :creator, class_name: 'User', foreign_key: 'creator_id'
has_many :referred_users, through: :mentions, source: :user
end
class Mention < ApplicationRecord
belongs_to :status
belongs_to :user
end
class User < ApplicationRecord
has_many :statuses, foreign_key: 'creator_id'
has_many :referring_statuses, through: :mentions, source: :status
end
答案 1 :(得分:0)
我不认为在这种情况下,您可以拥有一个直接用户状态模型,因为用户可以拥有许多状态,并且状态可以包含许多用户(创建它的用户,以及用户在状态中标记的用户#39;正确理解它。
我建议您在状态和用户之间创建一个模型,将其命名为Status_Info,并创建一个info属性,该属性表示该记录是为创建者还是已标记的人创建的。
要查找有关用户的所有状态,您只需在Status_Info模型中查找该user_id即可。即Status_Info.where(user_id:wanted_user_id)