Rails Как я могу построить крошку с разными URL для каждого элемента? - PullRequest
0 голосов
/ 09 января 2019

Мой контроллер содержит:

@prefix = params[:asset_id]

где params [: asset_id] содержит имена подкаталогов, такие как [downloads, company, брошюра].

Мое представление содержит:

<ol class="breadcrumb">
  <li><%= link_to 'Start', admin_assets_path %></li>
  <% for item in @prefix.split("/") %>
    <li>&nbsp<%= link_to "/ #{item}", "" %></li>
  <% end %>
</ol>

Результат будет выглядеть следующим образом:

Start / downloads / компания / брошюра

Моя проблема здесь, конечно, заключается в том, что все хлебные крошки будут связаны с одним и тем же URL:

http://localhost:3000/int/en/admin/assets/downloads%2Fcompany%2Fbrochure%2F/path

Я хочу, чтобы все они были связаны с соответствующим URL-адресом, например ::

скачиваний : http://localhost:3000/int/en/admin/assets/downloads%2F/path

компания : http://localhost:3000/int/en/admin/assets/downloads%2Fcompany%2F/path

брошюра : http: //../en/admin/assets/downloads%2Fcompany%2Fbrochure%2F/path

Как должна быть логика, чтобы каждый крошка имел свой собственный URL?

1 Ответ

0 голосов
/ 09 января 2019

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

Насколько я могу судить из вашего примера, вы используете следующее соглашение для определения места назначения ссылки для определенной крошки:

Ссылка назначения для хлебных крошек состоит из:

  • префикс статического пути (который в вашем случае будет http://localhost:3000/int/en/admin/assets/),
  • объединение всех хлебных крошек более высокого или того же уровня, к которым присоединяется /. В случае item = 'company' это будет downloads/company,
  • и статический суффикс /path.

Для создания этих ссылок вы можете использовать следующий код:

<ol class="breadcrumb">
  <li><%= link_to 'Start', admin_assets_path %></li>
  <%
    items = @prefix.split("/")
    prefix = admin_assets_path
    suffix = '/path'
  %>
  <% items.each.with_index do |item, i| %>
    <%
      middle = items[0..i].join('/')
      path = prefix + middle + suffix
    %>
    <li>&nbsp<%= link_to "/ #{item}", path %></li>
  <% end %>
</ol>

Однако ваш фактический вопрос был:

Как должна быть логика, чтобы каждый крошка имел свой собственный URL?

Ваше текущее соглашение (ссылки в виде хлебных крошек) имеет некоторые ограничения, например, интернационализация трудна, и мы не можем поддерживать случаи, когда логическая структура хлебных крошек не отражает структуру URL.

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

...