【问题标题】:Order users based on when the relationship was created_at根据创建关系的时间对用户进行排序_at
【发布时间】:2014-03-05 01:54:16
【问题描述】:

我使用 Railstutorials 创建关注者和 follow_users http://ruby.railstutorial.org/chapters/following-users#top

在我想显示特定人员的关注者/followed_users 的页面上,我想根据关系的创建时间来显示他们。

@users = @user.followers.order("created_at DESC")

类似 ^^ 的内容只显示创建用户的时间,而不是创建关系的时间。如何有效地运行此查询以获得正确的排序?

def following
   @users = @user.followed_users
end

def followers
   @users = @user.followers
end

-User Model-

has_many :relationships, foreign_key: "follower_id", :dependent => :destroy
has_many :followed_users, through: :relationships, source: :followed
has_many :reverse_relationships, foreign_key: "followed_id",
                               class_name:  "Relationship",
                               dependent:   :destroy
has_many :followers, through: :reverse_relationships, source: :follower


- Relationship Model - 

belongs_to :follower, class_name: "User", touch: true
belongs_to :followed, class_name: "User", touch: true
validates :follower_id, presence: true
validates :followed_id, presence: true

【问题讨论】:

  • 我认为这是不可能的,除非你在relationships 表上有一个created_at,在这种情况下我会回答这个问题
  • 我有一个 created_at 用于关系

标签: sql ruby-on-rails ruby-on-rails-4


【解决方案1】:

由于您的用户有两个关系,您可以轻松地按照您想要的方向访问该表。

has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :reverse_relationships, foreign_key: "followed_id"

第一个答案(当他们是追随者时)

您必须使用relationships 表,因为该记录会在您获得新关注者时创建,因此您可以这样做:

@user.relationships.order("created_at DESC").collect { |r| User.find(r.followed) }

第二个答案(当他们被关注时)

@user.reverse_relationships.order("created_at DESC").collect { |r| User.find(r.follower) }

【讨论】:

  • 感谢您的回复。我正在寻找一个显示followed_users 和一个为followers 的。我会用更多信息更新我的问题
  • 我的答案现在也应该回答了!
  • 哎呀,我把关系还给你了。生病为用户更新它
  • 为什么添加分页会为未定义的方法抛出错误?
  • 取决于我认为的分页方式
猜你喜欢
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多