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

如何控制或自定义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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:51:05