17

ブレッドクラムのソリューションについて少し不安があります。名前とリンクは、各コントローラー アクションで定義されます。

<a href="http://localhost:3000/">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()

質問: 私はそれほど頭が良くないので、この種のシステムはどこかで災害につながる可能性がありますか? これは(全体的に)非効率的ですか?

4

6 に答える 6

15

ブレッドクラムを作成するための Ruby on Rails プラグインであるGretelという名前の gemを作成しました。ブレッドクラムは別の構成ファイルで構成され、ビューで選択されます。

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 %>

app/views/layouts/application.html.erb で:

<%= breadcrumbs pretext: "You are here: " %>
于 2010-10-29T22:00:34.827 に答える
12

これは主に意見の問題ですが、とにかく:

  1. ビューにそれほど多くのロジックは必要ありません。私たちはおそらくそれをやったことがありますが、すぐに面倒になります。
  2. コードは、ツリーの深さに影響する将来の変更に対して安全ではありません。
  3. リンクされた変数*_nameとの代わりに*_link、何らかのlink_to機能を備えた適切なオブジェクトを使用することをお勧めします。

Railscastsのエピソード 162 に興味深い解決策があるかもしれません。

<% for page in @page.ancestors.reverse %>
  <%= link_to h(page.name), page %> &gt;
<% end %>
于 2010-02-17T12:58:54.607 に答える
5

ブレッドクラムのためだけにプラグインを使用しないでください。このリンクは、ブレッドクラムを生成する効率的な方法を提供します。

http://szeryf.wordpress.com/2008/06/13/easy-and-flexible-breadcrumbs-for-rails/

非常に古い投稿ですが、まだ機能しています。

于 2012-06-25T18:30:10.313 に答える
1

crumble宝石のフォークをしました。構成オプションはほとんどなく、放棄されているように見えますが、またはに切り替えようとするとbreadcrumbs_on_railsgretelビューまたはコントローラーに多くの行を追加する必要があることに気付きました (そして、それらはたくさんあります)。crumble1 つの構成ファイルで。いくつかのパッチを適用し、1 か所で構成することを好む場合は、これまでで最高のソリューションだと思います。

于 2016-08-17T08:50:02.320 に答える
1

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
于 2012-03-16T13:52:44.683 に答える