Рельсы переставляют заказы в модели контрольного списка - PullRequest
0 голосов
/ 02 мая 2018

У меня есть модель контрольного списка в рельсах со следующими столбцами.

product_id:int | content:string | archived:boolean | done:boolean

и я в настоящее время перечисляю эти контрольные списки в представлениях, как правило

<ul>
    <%=  @checklists.each do |list| %>
       <li><%= list.content %></li>
    <% end %>
</ul>

Теперь я хочу позволить пользователям изменять порядок контрольных списков, как в todoist .

Как я могу это сделать в рельсах? Нужно ли выполнять миграцию в базу данных с дополнительными столбцами, такими как order:int?

1 Ответ

0 голосов
/ 02 мая 2018

Ну, вы можете попробовать добавить дополнительное поле, как list_index Тогда в before create обратном вызове в модели вы можете:

def set_index
  list_index = self.class.last_index + 1
end

def self.last_index
  self.order(list_index: :desc).first.list_index
end

Затем на смену позиции:

def change(current_index)
  self.class.where(self.class.arel_table[:list_index].gte(current_index)).update_all('list_index = list_index + 1')
  self.update(list_index: current_index)
end

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

scope :after_index, ->(current_index) { where(self.arel_table[:list_index].gte(current_index)) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...