在rails中使用多级嵌套属性进行排序

时间:2015-01-03 12:38:22

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

所以我一直在努力订购:

gig.rb

Class Gigenrollment < ActiveRecord::Base
  has_many :gigenrollments, dependent: :destroy

gigenrollment.rb

Class Gigenrollment < ActiveRecord::Base
  belongs_to :gig
  belongs_to :profile

  def self.order_by_instrument
    includes(profile: :instruments).order(profiles: {instruments: {primary: :desc}})
  end

profile.rb

Class Profile < ActiveRecord::Base
  has_many: :gigenrollments, dependent: :destroy
  has_many :instruments, -> {order(primary: :desc)}, dependent: :destroy

instrument.rb

Class Instrument < ActiveRecord::Base
  belongs_to :profile

我有一种获得正确顺序的方法,但它有点难看。在控制器中看起来像这样:

# @gig is an instance of the Gig class, eg. Gig.last
@orchestra = @gig.gigenrollments
@orchestra = @orchestra.sort_by{ |ge| ge.profile.instruments.find_by(primary: true).nil? ? 'z'  : ge.profile.instruments.find_by(primary: true).name}

因此,我试图找出一种更简洁的方式来根据一个配置文件主要工具名称(一个配置文件应该没有或更多)从一个工具中订购gig注册。到目前为止,我认为我的包含正确,但我找不到像我这样具有嵌套属性的订单示例。

到目前为止,我已经在我的控制器中完成了这项工作,希望得到我想要的东西:

@orchestra = @gig.gigenrollments
@orchestra = @orchestra.order_by_instrument # check out the order_by_instrument function in the code snippet in gigenrollment.rb

但我得到的错误是

Direction should be :asc or :desc

这让我觉得我无法正确理解语法。我也试过这个没有成功

# gigenrollment.rb
def self.order_by_instrument
  includes(profile: :instruments).references(profile: :instruments).order('"profile"."instruments"."primary" ASC, "profile"."instruments"."name" ASC')
end

我一直在阅读this about includesthis about order以及有关Stackoverflow上此主题的几篇帖子,但它们似乎只有一个级别的嵌套属性(我有两个,gigenrollments - &gt; profile - &gt; instruments),他们正在使用范围,有表格,或者他们有一个where子句而不是order,这并没有真正让我到达我想要的地方(语法错误)。我还在Github上发现了一些让我觉得它应该可行的问题。

但是我得到的结论是,由于一个配置文件可以有很多乐器,而且只有属性为'primary'的乐器应该影响gigenrollments的排序,所以这对订单是不可行的,而我是写这个问题。


显然我需要声望才能发布链接,所以我在这里找到它们......

stackoverflow页面:
  stackoverflow.com/questions/23121975/how-can-i-order-nested-includes-records-with-rails-4
  stackoverflow.com/questions/19865208/rails-query-join-order-by-group-by-issue
  stackoverflow.com/questions/13619560/rails-y-way-to-query-a-model-with-a-belongs-to-association

Github问题:
  github.com/rails/rails/issues/8663
  github.com/rails/rails/issues/726

0 个答案:

没有答案