#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
столбец. Как названа эта таблица в вашей базе данных?