2009-02-24 2 views
1

Я создаю механизм для сортировки столбцов в таблицах. Каждая таблица представляет список данных, поэтому я вызываю таблицу базы данных «списки». Все, кроме упорядочивания столбцов, работает. Я хочу отобразить столбцы, упорядоченные по полю «position», но ничего не меняется, даже если я удалю оператор: order.Рельсы: упорядочение через отношение has_one

  • list.rb: has_many: колонны
  • column.rb: has_one: columnposition,: заказ => "ASC позиция"
  • columnposition.rb < - Позиции здесь хранятся в виде простых чисел.

Я могу получить доступ к list.column.columnposition.position без проблем, поэтому сами отношения, похоже, сработают.

Почему столбцы не упорядочены по «позиции ASC»?

// Изменить: Я принести списки с @lists = List.find: все

ответ

0

Я полагаю, что выражение, которое вы пытаетесь сделать заказ является

list.column 

И вы хотите, чтобы результат будет упорядочен по положению? Ну, в этом случае запрос не «смотрит в» ассоциацию столбцов, поэтому он не соблюдает ни одно из своих (-ов) порядков заказа.

Я не уверен, почему вам нужно сделать расположение столбцов своей собственной ассоциацией, тем более, что у вас есть это: has_one, поэтому есть только одна соответствующая строка.

Я бы просто поместил данные этого столбца в виде столбца в модели столбцов, а затем вы можете заказать его так, как хотите в одном запросе.

+0

Ввод позиции в таблицу столбцов не является хорошей идеей в данном случае, потому что каждый столбец имеет собственное имя и позиция определяется пользователем. –

+0

Итак, Коди, какие-либо новости по этому поводу? – vladr

1

Параметр :order => "position ASC" не помогает на уровне вашего определения отношения, так как это lists, которое вы хотите заказать по положению столбца, а не по позициям.

Удалите :order => "position ASC" из модели, и попробовать:

@lists = List.find(:all, :joins => { :columns => :column_positions }, \ 
    :order => 'column_positions.position ASC') 

вместо этого. Посмотрите на сгенерированный SQL при работе в режиме development.

Приветствия, В.