You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails创建共享按钮栏Partial:正确路径语法咨询

Rails 动态生成资源路径的正确写法

我来帮你搞定这个动态按钮栏的问题~你之前的写法问题在于直接用resource实例拼接路径助手名称,而我们需要的是模型的名称字符串,不是实例本身。下面给你两种靠谱的解决方案:

方案一:动态生成路径助手(适合通用场景)

在shared/buttons-bar里,我们可以通过resource实例拿到它对应的模型类,再提取单数模型名来动态调用路径助手:

<%= link_to 'New', send("new_#{resource.class.model_name.singular}_path"), class: 'btn btn-primary btn-md' %>

解释下关键部分:

  • resource.class:获取当前实例对应的模型类(比如supplier实例对应的就是Supplier类)
  • model_name.singular:提取模型的单数名称字符串(比如Supplier会返回"supplier")
  • send(...):动态调用对应的路径助手方法,最终就会生成new_supplier_path这样的正确路径

如果需要生成编辑路径(比如edit_supplier_path(supplier)),也可以用类似的方式:

<%= link_to 'Edit', send("edit_#{resource.class.model_name.singular}_path", resource), class: 'btn btn-secondary btn-md' %>

方案二:直接传入路径参数(更清晰稳妥)

如果担心动态调用的潜在问题(比如嵌套资源、命名空间场景),可以在调用partial的时候直接把路径传进去,这样代码可读性更高:
在suppliers/index里调用partial时:

<%= render 'shared/buttons-bar', resource: supplier, new_path: new_supplier_path %>

然后在shared/buttons-bar里直接使用传入的路径:

<%= link_to 'New', new_path, class: 'btn btn-primary btn-md' %>

这种方式特别适合复杂路由场景,比如有命名空间的admin_new_supplier_path,直接传参数就不用纠结动态拼接的问题了。

注意事项

  • 确保你的routes.rb里已经正确定义了资源路由,比如resources :suppliers,这样Rails才会生成new_supplier_path这类路径助手
  • 如果resource是新实例(比如在new页面),resource.class依然可以正确拿到模型类,不影响路径生成

内容的提问来源于stack exchange,提问作者catmal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:27:14