откуда рельсы получают запросы на вложенные объекты?

У меня есть хорошая трехуровневая вложенная форма с использованием formtastic_cocoon (jquery), и теперь я хочу иметь возможность отсортировать второй набор элементов в форме.

У меня jQuery ui работает без проблем, поэтому теперь нужно установить и обновить порядок сортировки в рельсах.

Я начал следить за рельсовыми фрагментами сортируемых списков рельсовых передач http://asciicasts.com/episodes/147-sortable-lists

Структура формы: Пользователь-> Задачи-> Местоположение.

В моей модели задач я установил index на

 def index
    @task = Task.find(params[:id],:order=>'position')
 end

def edit 
    @task = Task.find(params[:id],:order=>'position')
end 

и я ожидал, что моя консоль увидит

... FROM 'tasks' WHERE ('users'.'id' = 12) ORDER BY ('position')

или что-то в этом роде, но нет порядка вывода.

Есть ли еще что-то, что мне нужно для определения этого порядка ?? Откуда у nested_object свои отношения? Только модель?

Мои модели

class User < ActiveRecord::Base

     has_many :tasks
end 

class Task < ActiveRecord::Base

    belongs_to :user
end

person pedalpete    schedule 17.02.2011    source источник
comment
это действительно твой код? def edit @task = Task.find(params[:id],:order=>'position') end   -  person stef    schedule 18.02.2011


Ответы (4)


Я сменил модель на

class User < ActiveRecord::Base
     has_many :tasks, :order=>'position'
end
person pedalpete    schedule 17.02.2011

Вы используете неправильную модель, этот идентификатор принадлежит пользователю, поэтому вам необходимо сделать:

User.find(params[:id]).tasks(:order => 'position ASC')

В противном случае вы получаете только задачу с id = 12, а не задачи, user_id = 12

person Fernando Diaz Garrido    schedule 17.02.2011
comment
изменение моей модели на ваше предложение каким-то образом нарушает has_attached_file для пользователя. Не знаю почему. - person pedalpete; 18.02.2011

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

Я подозреваю, что вы действительно были в users # edit или, возможно, в _form.html.erb, где отображаются элементы формы для каждой задачи. Возможно, это был блок цикла @ user.tasks.each {...} или аналогичный.

Затем для данного пользователя выполните: @ user.tasks.order (: position). Или, может быть, вам нужны открытые задачи: @ user.tasks.where (: open => true) и т. Д.

person DGM    schedule 17.02.2011
comment
Вы предлагаете .order (: position) в представлении ?? - person pedalpete; 18.02.2011
comment
в представлении, или вы могли бы сделать для него область. - person DGM; 18.02.2011

Ваш код здесь немного неправильный.

Чтобы найти задачи этого пользователя, вы должны сделать это в своем маршруте:

User.find(params[:id]).tasks(:order=>'position')
person stef    schedule 17.02.2011