复杂的路由问题Rails 3

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复杂的路由问题Rails 3相关的知识,希望对你有一定的参考价值。

我需要匹配导致不匹配的复杂路由,这些是我的路由文件条目。

  match 'households/:id/edit'=>'households#edit', :via=>:get, :as=>:edit_household, :id=>/d{1,5}/
  match 'households/:id' => 'households#update', :via => :put
  match 'households/:id' => 'households#destroy', :via=>:delete
  match 'households/:city_code-:region_code'=>'households#index', :via=>:get, :as=>:households, :city_code=>/[A-Z]{3,5}/, :region_code=>/[A-Z]{0,3}d{0,5}/
  match 'households/:city_code-:region_code-:h_uid'=>'households#show', :via=>:get, :as=>:household, :city_code=>/[A-Z]{3,5}/, :region_code=>/[A-Z]{0,3}d{0,5}/

现在的问题是请求

http://0.0.0.0:3000/households/9/edit

正在路由到show controller并且正在生成错误

路由错误

No route matches {:controller=>"households", :action=>"show", :format=>nil, :city_code=>#<Household id: 9, uid: "0004", house_no: "House No 12", street: "Street 512", address: "Lorem ipsum dolor sit amet, consectetur adipisicing...", region_id: 3, created_at: "2012-01-05 11:06:32", updated_at: "2012-01-05 11:06:32">}
答案

我将路线改为:

  resources :households, :only=>[:index, :edit, :update, :destroy] do
    collection do
      match ':city_code-:region_code-:h_uid'=>'households#show', :via=>:get, :as=>:show, :city_code=>/[A-Z]{3,5}/, :region_code=>/[A-Z]{0,3}d{0,5}/
    end
  end

而且每件事都很好。

另一答案

看起来你不是将city_code传递给路线助手,而是对象:

:city_code => #<Household id: 9, uid: "0004", house_no: "House No 12", ... >

当然,它被路由器拒绝,因为它有一个约束::city_code=>/[A-Z]{3,5}/

以上是关于复杂的路由问题Rails 3的主要内容,如果未能解决你的问题,请参考以下文章

如何在Angular2 rc3路由中处理来自oauth重定向url的哈希片段

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

从 Rails 2 到 Rails 3 路由

Rails 3 的动态路由

Rails 3 路由如何匹配多个?

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段