Helper 中的动态路径

Posted

技术标签:

【中文标题】Helper 中的动态路径【英文标题】:Dynamic Paths in Helper 【发布时间】:2010-11-05 13:02:15 【问题描述】:

我正在尝试为我的管理链接创建一个辅助方法。在相当多的 查看我有代码

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

或类似的东西。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

很好的答案!顺便提一句。还有更具体的前缀多态助手。所以这个可以缩短为edit_polymorphic_path(model) “我为什么喜欢 Rails”的另一个例子!!有什么他们没有想到的吗?!【参考方案2】:

我会为此使用部分 - 而不是助手。无论您想在视图中的何处显示这些链接,只需渲染部分:

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

【讨论】:

+1,丹尼尔·皮茨施! Bob,如果您要在多个视图中使用相同的代码,请将其打包为局部视图并在您喜欢的任何地方渲染它 不应该是You're a Noob吗?! 我只是复制粘贴';-)【参考方案3】:

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

model_name = m.class.to_s.underscore

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

link_to "edit", send("edit_#model_name_path", m)

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

【讨论】:

请看@v4r 的回答,这是目前最好的。

以上是关于Helper 中的动态路径的主要内容,如果未能解决你的问题,请参考以下文章

NextJS:动态 router.pathname 不显示路径,而是显示文件名 - 如何获取路径中的单词?

Django中的动态链接总是调用第一个url路径

linux 添加动态库路径

win7旗舰版系统无法加入域,提示“找不到网络路径”怎么办

动态替换 ios 项目中的 .h 和 .m 文件(捆绑路径)

转载:动态规划以及路径记录