Redmine インストールでの link_to の動作の変更 (Ruby on Rails)
-
21-08-2019 - |
質問
Redmine インストール (Redmine 0.7.3.devel.2093 (MySQL)) の UI を変更しようとしています。
Redmine でプロジェクトを表示すると、プロジェクトのすべてのサブプロジェクトのリストが生成されます。
例えば、 app/views/projects/index.rhtml を呼び出します リンク先 関数:
<% if @project_tree[project].any? %>
<p><%= l(:label_subproject_plural) %>:
<%= @project_tree[project].sort.collect {|subproject|
link_to(h(subproject.name), {:action => 'show', :id => subproject}, :class => (User.current.member_of?(subproject) ? "subp fav" : "subp"))}.join(', ') %></p>
<% end %>
これにより、次の HTML が出力されます。
<p>Subprojects:
<a href="/projects/show/foo" class="subp fav">Foo Subproject</a>, <a href="/projects/show/bar" class="subp">Bar Subproject</a>, <a href="/projects/show/baz" class="subp fav">Baz Subproject</a></p>
カンマで区切られたサブプロジェクトのリストを視覚的に解析するのは非常に難しいことがわかりました。各サブプロジェクトを個別の行にリストしたいと考えています。(どのようなマークアップでも問題ありません。各リンクに UL、OL、または P タグを付けるのが理想的ですが、カンマの代わりに BR を使用してもまったく問題ありません。)
この変更を行うための最善の方法は何でしょうか?どこが見つからない link_to
アプリ内で定義されます。準備中 def link_to(
同様のことは何も起こりません。私は UI 派なので、Rails がこの問題をどのように処理するのかよくわかりません。ビュー テンプレートで定義されていないようです。
解決
提供したコードで直接実行できます。ただ変えるだけ
join(', ')
に
join('<br />')
それで済むはずです。
他のヒント
リンク先 Rails フレームワークによって提供されます。リンクをリストとして生成するのではなく、単に単一のリンクを作成するだけです。問題は、sort.collect と link_to への呼び出しを生成するブロックです。
これは機能し、サブプロジェクトをリスト項目に追加する必要があります。
<% @project_tree[project].sort.collect do |subproject| %>
<li>
<%= link_to(h(subproject.name), {:action => 'show', :id => subproject}, :class => (User.current.member_of?(subproject) ? "subp fav" : "subp")) %>
</li>
<% end %>
Redmine トランクの最新バージョンでは、プロジェクトのリストが HTML リスト (ul と li) を使用するように変更されたことを指摘しておきたいと思います。