使用命名空间路由时的路由错误

Posted

技术标签:

【中文标题】使用命名空间路由时的路由错误【英文标题】:Route errors when using namespace routes 【发布时间】:2011-09-03 19:05:21 【问题描述】:

当路由被命名空间时,你如何处理form_for?我遇到了一些我真正希望得到的奇怪路线错误。

例如,假设您有一个名为 Admin::CompaniesController 的控制器 您的 routes.rb 中的 :admin 命名空间:

namespace :admin do
  resources :companies
end

大多数事情都可以正常工作,但是在渲染新表单时出现错误。代码如下:

<%= simple_form_for(@company, :url => admin_company_path(@company)) do |f| %>

这是错误信息:

ActionView::Template::Error: No route matches :action=>"show", :controller=>"admin/companies", :id=>#<Company id: nil, name: nil, phone_number: nil, address: nil, postal_code: nil, is_enabled: true, courses_created: 0, province_id: nil, theme_id: nil, payment_plan_id: nil, created_at: nil, updated_at: nil>

我怎样才能让 Rails 在这里玩得很好?我显然想要一个 url 用于编辑,另一个用于新表单。通常,我什至不必将:url 放在我的form_for 语句中,但由于嵌套,我不得不这样做。

我现在不知道在这里做什么,至少不优雅。

【问题讨论】:

【参考方案1】:

尝试使用simple_form_for([:admin, @company]) do |f|

【讨论】:

这比我上面的解决方案好多了。谢谢你。我很高兴 rails 有一个不错的方法。 太棒了,很高兴看到它对你有用。祝你的应用好运! 太棒了!这里也有同样的问题,使用 simple_form 3.0.0 从 Rails 4.0.0 迁移到 4.0.1。谢谢! 有一个极端的情况,这落在了它的脸上:使用friendly_id 和slug,而不是你的管理URL。例如,/locations/placename/photos/picturename 的管理员 URL 为 /admin/photos/picturename/edit。这将导致 friendly_id 通过 slug 'picturename' 搜索 photo,因此如果您有多个带有该 slug 的 photos,它将只使用它找到的第一个。【参考方案2】:

我相信我只需要在路径的末尾复数路径,就像这样:

<%= simple_form_for(@company, :url => admin_companies_path(@company)) do |f| %>

这不是我所期望的。我只是猜到了。这不是有效的路线或任何东西,但它似乎适用于放置和发布。

【讨论】:

如果您这样做,如果您正在编辑或创建新条目,则需要设置不同的 url - 新条目将使用 admin_companies_path 并且编辑将使用 admin_company_path(@company),但是上面的解决方案更好,因为它适用于编辑和新建。

以上是关于使用命名空间路由时的路由错误的主要内容,如果未能解决你的问题,请参考以下文章

“没有路线匹配”:带有路由轨道命名空间的噩梦

tp模式 生命周期 命名空间 路由

Laravel 5.7 使用某些命名空间的资源控制器路由名称是啥?

如何避免Rails 5嵌套资源命名空间路由中的双下划线

URL路由系统-命名空间

为 Laravel 8 路由定义命名空间 [重复]