在助手的动态路径(Dynamic Paths in Helper)

2019-07-29 05:27发布

我试图创建我的管理链接的辅助方法。 在相当多的意见我的代码

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

或类似的东西。

Answer 1:

基本上你需要转换模型的类名弄成指向正确的路径。

model_name = m.class.to_s.underscore

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

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

顺便说一句,你不需要把link_tos在#{}因为函数返回一个字符串。



Answer 2:

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

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


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


文章来源: Dynamic Paths in Helper