如何控制或自定义Rails中link_to针对命名空间模型的命名路由?
问题原因
Rails的link_to自动推断路径时,是基于模型的命名空间和类名生成默认路由助手名称,而非路由配置里的as选项。你的模型是FooStuff::Bar,Rails默认会尝试调用foo_stuff_bar_url,但你通过路由的as: 'foo'把助手改成了foo_url,两者不匹配,因此报错。
解决方案
要让Rails自动使用foo_url作为@bar实例的默认路由助手,需要修改模型的路由相关命名配置,有两种常用方式:
方式一:重写模型名称标识
在FooStuff::Bar模型中添加以下代码,让Rails将模型识别为"Foo",从而匹配你的路由助手:
module FooStuff class Bar < ApplicationRecord def self.model_name ActiveModel::Name.new(self, FooStuff, "Foo") end end end
方式二:自定义路由键
直接重写模型的路由键,指定单数和复数形式:
module FooStuff class Bar < ApplicationRecord def self.route_key "foos" end def self.singular_route_key "foo" end end end
修改完成后,link_to('Something', @bar)就会自动调用foo_url(@bar),无需显式指定命名路由。
内容的提问来源于stack exchange,提问作者Andy Stewart
相关产品推荐
相关产品推荐

