Создание link_to для последовательных вложенных ресурсов - PullRequest
0 голосов
/ 31 марта 2019

Я создаю приложение rails, благодаря которому со страницы «показа» записи пользователь может циклически перемещаться по вложенным ресурсам записи (аналогично слайд-шоу). Например, со страницы «show» пользователь сможет ссылаться на «show» для первого вложенного ресурса. Оттуда пользователь сможет ссылаться на страницу «показать» следующего вложенного ресурса и так далее. Поскольку идентификаторы каждого вложенного ресурса должны быть расположены от наименьшего к наибольшему, как я могу создать link_to, который ищет следующий наибольший идентификатор (при условии, что вложенные ресурсы создаются для нескольких записей одновременно, они не обязательно могут быть последовательными) вложенного ресурса в данная запись.

1 Ответ

0 голосов
/ 01 апреля 2019

Из-за Rails magic вы можете передать ресурс непосредственно помощнику маршрута, и он будет использовать правильный идентификатор для этого ресурса. Например:

<% @foo.bars.each do |bar| %>
    <%= link_to bar.name, foo_bar_path(@foo, bar) %>
<% end %>

Выше предполагается, что ваш файл маршрута выглядит примерно так:

resources :foos do
    resources :bars
end

Я настоятельно рекомендую Маршрутизация с внешней стороны ; это был очень полезный ресурс для меня!

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

class Bar < ActiveRecord::Base
    scope :ordered, -> { order(id: :asc) }
end

А потом, на ваш взгляд, позвоните foo.bars.ordered.each do |bar| etc.... Ваш вложенный ресурс будет возвращен с наименьшего к наибольшему идентификатору, пропуская все, что было удалено.

Надеюсь, это поможет с тем, что вы спрашивали.

EDIT

Я неправильно понял вопрос. Для динамического создания «следующего» идентификатора вы можете создать метод next в своем дочернем классе. Этот ответ похоже на то, что вы хотите. Тогда, по вашему мнению, вы можете просто позвонить:

<%= link_to "Next", bar_path(current_bar.next) %>
...