0

一部のビュー コードをヘルパー メソッドにリファクタリングしていますが、さらに単純化できるかどうか疑問に思っています。

# In the view...

<%= navigation_link params[:controller], 'accounts', account_path %>

# ApplicationHelper

def navigation_link(controller_name, page_name, path_name)
  if controller_name == page_name
    content_tag :li, "#{page_name.capitalize.singularize}", :class => 'current'
  else
    content_tag :li, link_to("#{page_name.capitalize.singularize}", path_name)
  end
end

ルート ヘルパー メソッド名 account_path と共に文字列 'accounts' を渡すのは冗長に思えます。

本当に 3 番目の引数 path_name を渡す必要がありますか?それとも、2 番目の引数として渡す文字列を使用して、navigation_link ヘルパーでそれを生成できますか?

4

2 に答える 2

2

あなたのヘルパーはすでに Rails の一部になっていると思います。と呼ばれていますlink_to_unless_current(クリック可能)

例:

<li><%= link_to_unless_current("Home", { :action => "index" }) %></li>
于 2012-05-07T15:23:52.250 に答える
0

解決策は、Object#sendを使用することです。

# The view simplifies to this...

<%= navigation_link params[:controller], 'accounts' %>

# ...and the ApplicationHelper becomes...

def navigation_link(controller_name, page_name)
  if controller_name == page_name
    content_tag :li, "#{page_name.capitalize.singularize}", :class => 'current'
  else
    content_tag :li, link_to("#{page_name.capitalize.singularize}", send("#{page_name.singularize}_path")
  end
end
于 2012-05-07T17:31:03.703 に答える