Как я могу сохранить порядок товаров в списке Ajax? - PullRequest
0 голосов
/ 08 января 2011

У меня 2 модели, пользователи и проекты.Прямо сейчас они связаны соединением has_and_belongs_to_many (многие ко многим).У пользователя есть список проектов, и этот список можно сортировать по ajax.Но я хочу сохранить этот заказ.Как я могу отправить этот заказ и правильно хранить?

Ответы [ 3 ]

1 голос
/ 08 января 2011

Вы должны рассматривать порядок проектов в списке пользователей как атрибут отношений между пользователями и проектами.Каждая пара пользователь / проект имеет один атрибут «порядок», верно?

Так что информация должна попадать в промежуточную таблицу (projects_users).

Но поскольку вы не можете добавить атрибуты в таблицу ссылок have_and_belongs_to_many, вы должны изменить ее на что-то вроде:

class User
  has_many :allocations
  has_many :projects, :through => :allocations
end

class Project
  has_many :allocations
  has_many :users, :through => :allocations
end

, и миграция для таблицы распределений должна выглядеть примерно так:

create_table :allocations do |t|
  t.integer :project_id
  t.integer :user_id
  t.integer :order
end

Таким образом, для каждого проекта, которому выделен данный пользователь, вы можете указать порядок.

Надеюсь, это поможет.

1 голос
/ 08 января 2011

Что вы можете сделать, это перебрать все элементы с помощью Javascript и отправить массив идентификаторов в действие Rails, используя AJAX (как в примере, приведенном Ману Мора).Параметры будут выглядеть примерно так:

project_ids: 1,3,5,2,4
id: 1

Тогда в вашем действии контроллера вы можете сделать следующее:

@user = User.find(params[:id])
@user.update_attributes(:project_ids => params[:project_ids].split(","))

Я не знаю, как отправить параметры таким образомчто это Массив автоматически, поэтому я использую split.Я не знаю, будет ли порядок в порядке при использовании HABTM.Если нет, вы должны использовать has_many :through со столбцом 'order' или 'position'.Способ, который я показал вам, тогда не сработает, потому что вам также нужно установить столбец заказа.

Надеюсь, это сработает.:)

1 голос
/ 08 января 2011

В сортируемый список я работаю с jQueryUI -> http://jqueryui.com/demos/sortable/

Чтобы получить список:

var projects = Array();
var j=0;

$("#sortable li").each(function(i, item){
   projects[j] = $("#"+item.id).html();            
   j++;
});

var data = {"list": projects};

Затем я отправляю данные с помощью ajax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...