Изменить порядок записей в зависимости от пользователя? - PullRequest
1 голос
/ 30 марта 2012

Представьте, что у меня есть список задач, которые видны многим членам команды. Я хотел бы дать возможность каждому члену команды поддерживать свой собственный порядок списков задач в зависимости от того, какие задачи они считают наиболее важными.

Как сохранить этот порядок на уровне базы данных?

Ответы [ 3 ]

4 голосов
/ 30 марта 2012

Я бы сохранял ордер в виде числа с плавающей точкой (вероятно, называемого «позиция» или что-то похожее) в объединяющей таблице, которая соединяет пользователей и задачи. Затем, когда вы берете список, вы можете указать этот порядок в отношении. Одна из основных причин использования отношений :has_many :through заключается в том, что вы хотите хранить данные о самой ассоциации (а не о любой из связанных моделей).

2 голосов
/ 30 марта 2012

Вам понадобится отдельная модель, которая связана с пользователями и задачами. Например. (при условии, что ваши существующие модели называются User и Todo:

приложение / модели / todo_orders.rb

class TodoOrders.rb < ActiveRecord::Base

  belongs_to :user
  belongs_to :todo

  validates_uniqueness_of :order_num
end

дб / мигрирует / yyyymmddhhmmss_create_todo_orders.rb

def up
  t.integer :user:id
  t.integer :todo_id
  t.integer :order_num
end

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

приложение / модели / todo.rb

attr_accessor :cur_order

приложение / модели / user.rb

has_many :todo_orders

def get_todos
  todo_orders.includes(:todo).map do |todo_order|
    todo = todo_order.todo
    todo.cur_order = todo_order.order_num
    todo
  end
end

Таким образом, вызов get_todos для пользовательского объекта вернет список Todos с порядком отображения, который хранится в их атрибуте cur_order

1 голос
/ 31 марта 2012

Ваша модель базы данных должна выглядеть примерно так:

enter image description here

Это довольно стандартное отношение «многие ко многим» с таблицей «ссылка» в середине, но содин поворот: ORDER является частью альтернативного ключа {USER_ID, ORDER} (обозначен U1 на диаграмме выше), но не часть первичного ключа.Это то, что делает порядок на пользователя .

(Отказ от ответственности: я не знаком с Ruby on Rails - этот ответ чисто с точки зрения моделирования базы данных.)

...