Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 对于ruby关联,在同一个类中使用has_one和belown_to_Ruby On Rails_Ruby_Activerecord_Associations_Rails Activerecord - Fatal编程技术网

Ruby on rails 对于ruby关联,在同一个类中使用has_one和belown_to

Ruby on rails 对于ruby关联,在同一个类中使用has_one和belown_to,ruby-on-rails,ruby,activerecord,associations,rails-activerecord,Ruby On Rails,Ruby,Activerecord,Associations,Rails Activerecord,我正在尝试创建状态,其中将有一个创建状态的用户和一个状态相关的用户 非常类似于在facebook帖子中“标记”某人。我需要创建帖子的用户成为所有者,但我还需要找出某种方法将状态与实际状态关联起来 最终目标是显示某个用户的所有状态 我有一门地位课 class Status < ApplicationRecord belongs_to :user validates :content, presence: true, length: { m

我正在尝试创建状态,其中将有一个创建状态的用户和一个状态相关的用户

非常类似于在facebook帖子中“标记”某人。我需要创建帖子的用户成为所有者,但我还需要找出某种方法将状态与实际状态关联起来

最终目标是显示某个用户的所有状态

我有一门地位课

class Status < ApplicationRecord
  belongs_to :user

  validates :content, presence: true,
                      length: { minimum: 2}

  validates :user_id, presence: true
end
但是我现在意识到这不是最好的实现


有人能帮我处理这个关联吗?

我不认为在这种情况下你可以有一个直接的用户到状态模型,因为用户可以有很多状态,状态可以有很多用户(创建它的用户,如果我理解正确的话,在状态中标记用户)

我建议您在status和user之间创建一个模型,称之为status\u Info,并创建一个Info属性,该属性表示记录是为创建者还是为被标记的人创建的


要查找用户的所有状态,只需在状态信息模型中查找该用户的id即可。i、 e.状态信息。where(user\u id:wanted\u user\u id)

我不认为在这种情况下可以有一个直接的用户到状态模型,因为用户可以有很多状态,状态可以有很多用户(创建它的用户,如果我理解正确的话,在状态中标记用户)

我建议您在status和user之间创建一个模型,称之为status\u Info,并创建一个Info属性,该属性表示记录是为创建者还是为被标记的人创建的


要查找用户的所有状态,只需在状态信息模型中查找该用户的id即可。i、 e.状态信息。where(user\u id:wanted\u user\u id)

一个用户应该能够创建多个状态,并在单个状态中标记多个用户。因此,您应该使用
has\u many
,而不是
has\u 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
类状态
用户应该能够创建多个状态并在单个状态中标记多个用户,这是有道理的。因此,您应该使用
has\u many
,而不是
has\u 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
类状态
刚准备发布一个答案,说需要一个完整的表格,但由于您的编辑已修复了上一个答案的问题。我将投票表决,继续前进;)@约翰·里德,是的,我说他需要多对多,但出于某种原因我没有这么做。现在是凌晨4:30:)刚准备发布一个答案,说需要一个完整的表格,但由于您的编辑已修复了上一个答案的问题。我将投票表决,继续前进;)@约翰·里德,是的,我说他需要多对多,但出于某种原因我没有这么做。现在是凌晨4:30:)
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