使用命名空间路由时的路由错误
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),但是上面的解决方案更好,因为它适用于编辑和新建。以上是关于使用命名空间路由时的路由错误的主要内容,如果未能解决你的问题,请参考以下文章