在这种情况下如何设置`has_many`条件?

时间:2014-07-02 16:19:34

标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-4

用户   - last_active_at(最后签到时间)

社区  -user_id

代码  -用户身份  -community_id

  1. 用户has_many社区&代码
  2. 社区belongs_to user,has_many codes
  3. Code belongs_to user&社区
  4. 模型/ 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)
    

    如何更改我的代码?

1 个答案:

答案 0 :(得分:1)

我认为您需要将has_many模型上的User更改为has_many codes, through: :communities。那么Code应该只belongs_to :community。除非Users没有CodesCode相关联,否则Community可以{{1}}