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
相关产品推荐
相关产品推荐

