Helper中的动态路径

我正在尝试为我的管理链接创建一个帮助方法。 在很多视图中我都有代码

    "You're a Noob", :method => :delete %>  

仅在登录时显示这些内容。

我想在他们的位置做这样的事情

  

并将当前项传递给应用程序帮助程序方法

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

或类似的东西。

基本上你需要将模型的类名转换为指向正确路径的东西。

 model_name = m.class.to_s.underscore 

然后用它来调用相应的路径方法

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

顺便说一句,您不需要将link_tos放在#{}因为该函数只返回一个字符串。

Rails提供了多态路由来处理这个问题: http : //api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html

 = link_to "Edit", polymorphic_path(model), :method => :put 

我会使用一个部分 – 而不是帮助者。 无论您想在视图中显示这些链接,只需渲染部分:

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