использование метода order в третьем ассоциативном поле

#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
  

В настоящее время я повторяю детали заказа на мой взгляд и пытаюсь отсортировать или упорядочить по фамилии
как я могу этого добиться?

Я использую это, на мой взгляд

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

должен ли я использовать sort? или упорядочить?

это моя ошибка

 column "last_name" does not exist
  

Ответ №1:

 @order_details.joins(order: :person).order('last_name ASC')
  

должно сработать.

Причина в том, что у вас нет прямой связи с person из order_details (это через order). Это называется вложенным соединением, и вы можете ссылаться на API здесь

Имена, передаваемые методам joins, не являются именами таблиц, это имена ассоциаций.

Ответ №2:

Просто добавьте имя таблицы к причине заказа:

 @order_details.joins(:person).order('people.last_name ASC')
  

Комментарии:

1. Я использовал, people потому что предполагал, что таблица Person модели соответствует соглашениям Rails и, следовательно, имеет имя people .

2. person это имя ассоциации, и оно единственное, потому что запись может принадлежать только одному пользователю в данный момент. Таблица, в которой хранятся все записи Person модели, названа people потому, что в этой таблице хранится много people записей. Это соглашения об именовании Rails.

3. Это странно. Как выглядит ваша схема базы данных? Вы назвали таблицу по-другому, например, persons ?

4. @order_details. объединения(order: :person).order(‘last_name ASC’) должны сработать. Причина в том, что у вас нет прямой связи с person из order_details (это через Order). Это называется вложенным соединением, и вы можете ссылаться на API здесь

5. Вам нужно передать имя таблицы order методу, в котором был определен last_name столбец. Как названа эта таблица в вашей базе данных?