Как «упорядочить», используя has_many через?

#ruby-on-rails #ruby #models

#ruby-on-rails #ruby #Модели

Вопрос:

У меня есть две таблицы с таблицей соединений между ними:

Родительский элемент:
дочерние страницы:
объединение объектов: Сетки

В моих моделях они настроены на отношения «многие ко многим» (has_many through):

    class Page < ActiveRecord::Base
      belongs_to :books
      has_many :grids
      has_many :things, :through => :grids
    end


class Thing < ActiveRecord::Base
      has_many :grids
      has_many :pages, :through => :grids
    end

    class Grid < ActiveRecord::Base
      belongs_to :page
      belongs_to :thing
    end
  

Теперь я хочу иметь возможность сортировать «вещи», используя идентификатор заказа из grid, называемый number , как я могу это сделать?

Спасибо!

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

1. ваше определение модели Thing отсутствует

2. Извиняюсь.. это взаимосвязь между страницей и вещами, а не книгой, я исправил это в исходном сообщении 🙂

Ответ №1:

вам нужна опция «:include (s)» в вашем методе поиска, а затем «order_by ()» …

вы бы использовали что-то вроде этого:

 Thing.where(...some condition or all..., :include => :grid ).order_by(grid.number)
  

См:

http://guides.rubyonrails.org/active_record_querying.html

http://m.onkey.org/active-record-query-interface

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

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

1. И это ...order_by(grid.number) действительно? Что это grid в этом контексте? Должно ли это быть ...order_by('grid.number') ?

2. Спасибо! — Это сработало, за исключением того, что это «.order (grids.number)», также отличные ссылки, именно то, что я искал..