Helper中的动态路径

时间:2009-06-24 14:34:11

标签: ruby-on-rails dynamic path helpers

我正在尝试为我的管理链接创建一个帮助方法。在不少 我有代码

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

或类似的东西。

3 个答案:

答案 0 :(得分:53)

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

model_name = m.class.to_s.underscore

然后用它来调用适当的路径方法

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

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

答案 1 :(得分:44)

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

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

答案 2 :(得分: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 %>