Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 你如何按远亲对收藏进行排序?_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 你如何按远亲对收藏进行排序?

Ruby on rails 你如何按远亲对收藏进行排序?,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有一个固定深度的树状关系模型,每个级别都有一个代码属性——类似于此 class Category < ActiveRecord::Base has_many :sub_categories default_scope order(:code) end class SubCategory < ActiveRecord::Base belongs_to :category has_many :items def self.sorted sel

我有一个固定深度的树状关系模型,每个级别都有一个代码属性——类似于此

class Category < ActiveRecord::Base 
  has_many :sub_categories

  default_scope order(:code)
end

class SubCategory < ActiveRecord::Base
  belongs_to  :category
  has_many    :items

  def self.sorted
    self.joins(:category).order('"categories".code ASC, "sub_categories".code')
  end
end

class Item < ActiveRecord::Base
  belongs_to :sub_category

  def self.sorted
    # what goes here?
  end
end
类别
Category.all
获取按
categories.code
排序的所有类别

SubCategory.sorted
获取按
categories.code,sub\u categories.code
排序的所有子类别。我使用这种方法是因为
default\u作用域:连接(:categories).order('categories.code,sub\u categories.code')
make
。find
返回只读记录

我想调用
Items.sorted
并获取按
categories.code,sub_categories.code,Items.code
排序的所有项目,但我不知道如何进行排序。我想我需要一秒钟。加入,但我没有一个关系名称提供

试试这个:

class Item < ActiveRecord::Base
  belongs_to :sub_category

  def self.sorted
    # do not need self here as that is implied
    joins(sub_category: :category).
    order('"categories".code ASC, "sub_categories".code, "items".code')
  end
end
class项
请参阅加入嵌套关联的文档

尝试以下操作:

class Item < ActiveRecord::Base
  belongs_to :sub_category

  def self.sorted
    # do not need self here as that is implied
    joins(sub_category: :category).
    order('"categories".code ASC, "sub_categories".code, "items".code')
  end
end
class项

查看文档以加入嵌套的关联

这是可行的,但似乎应该有更好的方法

def self.sorted
  joins(:sub_category).
    joins('INNER JOIN "categories" on "categories".id = "sub_categories".category_id').
    order('"categories".code ASC, "sub_categories".code ASC, "items".number ASC')
end

这是可行的,但似乎应该有更好的方法

def self.sorted
  joins(:sub_category).
    joins('INNER JOIN "categories" on "categories".id = "sub_categories".category_id').
    order('"categories".code ASC, "sub_categories".code ASC, "items".number ASC')
end

+1表示写得好的问题+1表示写得好的问题这是我最初的想法之一,但我一直没能让它起作用。我不相信
有一个:通过
可以处理
所属的关系…引用不在正确的位置。调用
@项时,我得到了一个
ActiveRecord::HasManyThroughAssociationNotFoundError
。每个
都不知道..学到了一些东西…用不同的解决方案更新了答案这比我得到的有了很大的改进,但是否还有改进订单调用的方法?显式命名表和列看起来不像rails的方式…我希望类似order(categories::code,sub_categories::code,:code)的东西可以放松与数据库的耦合。我不认为这种语法存在于
order
see,这是我的第一个想法,但我没能让它工作。我不相信
有一个:通过
可以处理
所属的关系…引用不在正确的位置。调用
@项时,我得到了一个
ActiveRecord::HasManyThroughAssociationNotFoundError
。每个
都不知道..学到了一些东西…用不同的解决方案更新了答案这比我得到的有了很大的改进,但是否还有改进订单调用的方法?显式地命名表和列似乎不像rails的方式……我希望类似order(categories::code,sub_categories::code,:code)的东西能够放松与数据库的耦合。我认为对于
order