29

管理リンクのヘルパー メソッドを作成しようとしています。かなりの数のビューで、コードを持っています

<% if current_user %>
<%= link_to "Edit", edit_model_path(model) %>
<%= link_to "New", new_model_path %>
<%= link_to "Delete", model, :confirm => "You're a Noob",  :method
=> :delete %>
<% end %>

ログイン時にのみ表示されます。

私は彼らの代わりにこのようなことをしたいと思います

<%= admin_links(model) %>

現在のアイテムをアプリケーションヘルパーメソッドに渡します

def admin_links(m)
 if current_user
  a = "#{link_to "edit" edit_m_path(m)}"
  a << "#{link_to "new" new_m_path}"
  a << "#{link_to "Delete", m, :confirm => "Your a Noob",  :method
=> :delete}"
 end
end

またはそのようなもの。

4

3 に答える 3

57

基本的に、モデルのクラス名を正しいパスを指すものに変換する必要があります。

model_name = m.class.to_s.underscore

そして、それを使用して適切なパスメソッドを呼び出します

link_to "edit", send("edit_#{model_name}_path", m)

余談ですが、link_tosは#{}単に文字列を返すだけなので、link_tosを入れる必要はありません。

于 2009-06-24T14:52:00.017 に答える
55

Rails は、この問題を処理するポリモーフィック ルートを提供します: http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html

= link_to "Edit", polymorphic_path(model), :method => :put
于 2012-07-20T08:09:43.833 に答える
3

これには、ヘルパーの代わりにパーシャルを使用します。これらのリンクをビューに表示したい場合は、パーシャルをレンダリングするだけです:

<%= render :partial => "admin_links", :locals => { :model => model } %>

_admin_links.html.erb元のコードを貼り付けるだけです:

<% if current_user %>
  <%= link_to "Edit", edit_model_path(model) %>
  <%= link_to "New", new_model_path %>
  <%= link_to "Delete", model, :confirm => "Your a Noob", :method => :delete %>
<% end %>
于 2009-11-13T11:04:56.393 に答える