Ruby on rails 在第三关联域中使用顺序法

Ruby on rails 在第三关联域中使用顺序法,ruby-on-rails,ruby,ruby-on-rails-4,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 4,Ruby On Rails 5,我目前正在迭代视图中的订单详细信息,并尝试按姓氏排序或排序 我怎样才能做到这一点 在我看来,我正在使用这个 class Order has_many :order_details end class OrderDetail belongs_to :order belongs_to :person end class Person has_one :profile delegate :first_name, last_name end class Profile end

我目前正在迭代视图中的订单详细信息,并尝试按姓氏排序或排序 我怎样才能做到这一点

在我看来,我正在使用这个

class Order
  has_many :order_details
end

class OrderDetail
  belongs_to :order
  belongs_to :person
end

class Person
  has_one :profile
  delegate :first_name, last_name
end

class Profile

end
我应该使用sort吗?还是点菜

这是我的错误

@order_details.joins(:person).order('last_name ASC').each do |detail|

只需将表名添加到订单中即可,原因如下:

column "last_name" does not exist

只需将表名添加到订单中即可,原因如下:

column "last_name" does not exist
我们应该做到这一点

原因是您与订单详情中的人员没有直接关联(通过订单)。它被称为嵌套联接,您可以引用API

传递给联接方法的名称不是表名称,而是关联名称

我们应该做到这一点

原因是您与订单详情中的人员没有直接关联(通过订单)。它被称为嵌套联接,您可以引用API


传递给联接方法的名称不是表名,它们是关联名称。

我使用了
people
,因为假设
Person
模型的表遵循Rails约定,因此命名为
people
Person
是关联的名称,它是单数的,因为一条记录在同一时间只能属于一个人。存储
Person
模型的所有记录的表被命名为
people
,因为该表中存储了许多
people
。这些是Rails的命名约定。这很奇怪。您的数据库模式是什么样子的?您是否对该表进行了不同的命名,例如,
persons
?@order\u details.joins(order::person)。order('last\u name ASC')应该起作用。原因是您与订单详情中的人员没有直接关联(通过订单)。它被称为嵌套联接,您可以引用需要将表名传递给定义了
last\u name
列的
order
方法的API。该表在您的数据库中是如何命名的?我使用了
people
,因为假定
Person
模型的表遵循Rails约定,因此命名为
people
Person
是关联的名称,它是单数,因为一条记录在同一时间只能属于一个人。存储
Person
模型的所有记录的表被命名为
people
,因为该表中存储了许多
people
。这些是Rails的命名约定。这很奇怪。您的数据库模式是什么样子的?您是否对该表进行了不同的命名,例如,
persons
?@order\u details.joins(order::person)。order('last\u name ASC')应该起作用。原因是您与订单详情中的人员没有直接关联(通过订单)。它被称为嵌套联接,您可以引用需要将表名传递给定义了
last\u name
列的
order
方法的API。该表在数据库中是如何命名的?
@order_details.joins(order: :person).order('last_name ASC')