用户 - last_active_at(最后签到时间)
社区 -user_id
代码 -用户身份 -community_id
模型/ user.rb
has_many :communities
has_many :codes, :dependent => :destroy
模型/ community.rb
belongs_to :user, counter_cache: true
has_many :codes
模型/ code.rb
belongs_to :user, counter_cache: true
belongs_to :community, counter_cache: true
我可以使用名为'acts_as_votable'的宝石(https://github.com/ryanto/acts_as_votable)通过这样的代码检索所有社区
@communities = current_user.get_up_voted(Community)
然后我试图检索所有@communities下的所有代码。
@codes = Code.includes(:user).where(:community_id => @communities.collect(&:id)).order('created_at DESC').page(params[:page]).per(10)
但我想按用户表的last_active_at
列排序。
所以我在下面尝试了这个
@codes = Code.includes(:user).where(:community_id => @communities.collect(&:id)).order("users.last_active_at DESC").page(params[:page]).per(10)
但是需要永远加载。
最佳解决方案是否可能通过代码在社区和用户之间产生has_many
条件?
那应该是这样的。
@codes = @communities.code_group.include(:users).order("users.last_active_at DESC").page(params[:page]).per(10)
如何更改我的代码?
答案 0 :(得分:1)
我认为您需要将has_many
模型上的User
更改为has_many codes, through: :communities
。那么Code
应该只belongs_to :community
。除非Users
没有Codes
与Code
相关联,否则Community
可以{{1}}