web-dev-qa-db-ja.com

Ruby on Rails

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

<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()

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

17
Michael Schmitz

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

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

あなたは Railscastsのエピソード162 でうまくいく素晴らしい解決策に興味があるかもしれません

<% for page in @page.ancestors.reverse %>
  <%= link_to h(page.name), page %> &gt;
<% end %>
10

ブレッドクラムメニューは、ほとんどの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>

プラグインを使用したくない場合でも、プラグインを見てみることをお勧めします。これはオープンソースであり、アプリのアイデアをつかむことができます。

29
Simone Carletti

Gretel という名前のgemを作成しました。これは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 %>

App/views/layouts/application.html.erb:

<%= breadcrumbs pretext: "You are here: " %>
15
Lasse Bunk

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

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

非常に古い投稿ですが、それでも機能します。

5
user1449337

ここに2つのアプローチがあります:

RLを分割して表示

コントローラでブレッドクラムをセットアップするコントローラに実装されたより柔軟なソリューション: Rails用の簡単で柔軟なブレッドクラム

2
Lolindrath

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
1
Happynoff

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

1
sekrett