Панировочные сухари в Ruby on Rails
Я немного не уверен в своем решении. Имена и ссылки определяются в каждом действии контроллера:
<a href="#" onclick="location.href='http://localhost:3000/'; return false;">Home</a>
<% if defined? @l1_link %>
> <a href="<%= @l1_link%>"><%= @l1_name %></a>
<% if defined? @l2_link %>
> <a href="<%= @l2_link%>"><%= @l2_name %></a>
<% end %>
<% end %>
Таким образом, я могу использовать:
@l1_link = user_path()
Вопрос: Как я не настолько умный - может ли такая система привести к тому, что где-то в этом месте? Является ли это (грубо) неэффективным?
Ответы
Ответ 1
В основном это вопрос мнения, но в любом случае:
- Я бы не хотел, чтобы в логике было много логики. Вероятно, мы все это сделали, но это быстро запуталось.
- Код не защищен от будущих изменений, которые влияют на глубину дерева.
- Вместо связанных переменных
*_name
и *_link
я бы предложил использовать соответствующие объекты в любом случае с некоторыми link_to
функциональными возможностями.
Вы можете найти эпизод 162 из Railscasts, представляющий интерес для хорошего решения, которое проходит с помощью
<% for page in @page.ancestors.reverse %>
<%= link_to h(page.name), page %> >
<% end %>
Ответ 2
Меню Breadcrumbs является повторяющимся шаблоном в большинстве приложений Rails. Чтобы решить эту проблему, я создал и выпустил плагин под названием breadcrumbs_on_rails.
Вы определяете свои сухарики в контроллере
class MyController
add_breadcrumb "home", root_path
add_breadcrumb "my", my_path
def index
# ...
add_breadcrumb "index", index_path
end
end
и вы визуализируете их в своем представлении.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>untitled</title>
</head>
<body>
<%= render_breadcrumbs %>
</body>
</html>
Даже если вы не хотите использовать плагин, я рекомендую вам взглянуть на него. Это с открытым исходным кодом, и вы можете получить некоторые идеи для своего приложения.
Ответ 3
Я создал драгоценный камень с именем Gretel, который является плагином Ruby on Rails для создания панировочных сухарей. Панировочные сухари настроены в отдельном файле конфигурации и выбраны в представлении.
Пример config/breadcrumbs.rb
:
crumb :root do
link "Home", root_path
end
crumb :projects do
link "Projects", projects_path
end
crumb :project do |project|
link project.name, project_path(project)
parent :projects
end
crumb :project_issues do |project|
link "Issues", project_issues_path(project)
parent :project, project
end
crumb :issue do |issue|
link issue.name, issue_path(issue)
parent :project_issues, issue.project
end
На ваш взгляд:
<% breadcrumb :issue, @issue %>
В вашем приложении /views/layouts/application.html.erb:
<%= breadcrumbs pretext: "You are here: " %>
Ответ 4
Не используйте плагины только для сухарей. Эта ссылка обеспечивает эффективный метод для создания панировочных сухарей.
http://szeryf.wordpress.com/2008/06/13/easy-and-flexible-breadcrumbs-for-rails/
Хотя это очень старый пост, он все равно работает.
Ответ 5
Вот два подхода:
Разделите URL-адрес и отобразите его
Более гибкое решение, реализованное в контроллере, где вы настраиваете сухарики в контроллере: Легкие и гибкие пастилки для рельсов
Ответ 6
Вы также можете использовать Ariane http://github.com/simonc/ariane
С его помощью вы можете генерировать любой вид панировки, как ссылки в абзаце или как ul/li:)
Если вам нужно что-то конкретное, вы можете создать свой собственный рендерер.
Это довольно просто использовать, просто добавьте это в before_filter
:
ariane.add 'Home', root_path # in the app controller to have it everywhere
ariane.add 'Some Page', some_path
Ответ 7
Я сделал вилку crumble
gem. У него очень мало вариантов конфигурации, и он кажется заброшенным, но когда я попытался переключиться на breadcrumbs_on_rails
или gretel
, я понял, что мне нужно добавить много строк в мои представления или контроллеры (и у меня их много), но с crumble
все хранится в одном файле конфигурации. Если вам нравится делать некоторые исправления и предпочитаю конфигурацию в одном месте, я думаю, что это лучшее решение.