Ruby on rails 如何在Rails 4连接操作中正确使用合并?

Ruby on rails 如何在Rails 4连接操作中正确使用合并?,ruby-on-rails,join,ruby-on-rails-4,law-of-demeter,Ruby On Rails,Join,Ruby On Rails 4,Law Of Demeter,我有以下代码结构: class Asset < ActiveRecord::Base belongs_to :state scope :order_by_year, -> { joins(:state).merge(State.order_by_year) } ... class State < ActiveRecord::Base belongs_to :financial_statement has_many :assets scope :orde

我有以下代码结构:

class Asset < ActiveRecord::Base
  belongs_to :state
  scope :order_by_year, -> { joins(:state).merge(State.order_by_year) }
  ...

class State < ActiveRecord::Base
  belongs_to :financial_statement
  has_many :assets
  scope :order_by_year, -> { joins(:financial_statement).merge(FinancialStatement.order_by_year) }
  ...  

class FinancialStatement < ActiveRecord::Base
  belongs_to :financial_year
  has_many :states
  scope :order_by_year, -> { joins(:financial_year).merge(FinancialYear.order_by_year) }
  ...

class FinancialYear < ActiveRecord::Base
  has_many :financial_statements
  scope :order_by_year, -> { order("financial_years.year DESC") }
  ...
我试图遵循德米特定律,因此资产模型不应该知道FinancialYear(保存年份信息)。我正在尝试使用merge来实现这一点

Asset.order_by_year creates the following sql:

1: SELECT `assets`.* FROM `assets` 
2: INNER JOIN `states` ON `states`.`id` = `assets`.`state_id` 
3: LEFT OUTER JOIN `financial_years` ON `financial_years`.`id` = `financial_statements`.`financial_year_id` 
4: LEFT OUTER JOIN `financial_statements` ON `financial_statements`.`id` = `states`.`financial_statement_id`  
5: ORDER BY financial_years.year DESC

这会给出错误消息,因为第3行和第4行的顺序错误。知道Rails为什么这样创建查询吗?你知道如何改变这个结构来让它工作吗?任何帮助都将不胜感激。

你知道这一点吗?不幸的是,我没有。查询将以错误的顺序创建,这样的长链将不起作用。如果我没记错的话,3个阶段可以,第4个阶段出错。:/好的,谢谢你的补充。
Asset.order_by_year creates the following sql:

1: SELECT `assets`.* FROM `assets` 
2: INNER JOIN `states` ON `states`.`id` = `assets`.`state_id` 
3: LEFT OUTER JOIN `financial_years` ON `financial_years`.`id` = `financial_statements`.`financial_year_id` 
4: LEFT OUTER JOIN `financial_statements` ON `financial_statements`.`id` = `states`.`financial_statement_id`  
5: ORDER BY financial_years.year DESC