【问题标题】:Complex routing issues Rails 3复杂的路由问题 Rails 3
【发布时间】:2012-01-05 11:42:31
【问题描述】:

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

  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

正在路由到显示控制器并且正在生成错误

路由错误

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">}

【问题讨论】:

  • 您确定该 url 正在路由到显示控制器,而不是编辑页面上的某些内容尝试(但失败)生成指向显示页面的链接?
  • 是的,我敢肯定,当我在浏览器中输入直接编辑 url 时,它会到达 No route match error,并且错误地您可以看到 show 操作被描述。
  • development.log 中有回溯吗?
  • 开发日志中没有可用的回溯。

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1


【解决方案1】:

我将路线更改为:

  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

一切正常。

【讨论】:

    【解决方案2】:

    您似乎不是将 city_code 传递给路由助手,而是传递对象:

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

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

    【讨论】:

    • 我没有在视图中传递任何东西。我正在通过在浏览器中输入 url 来测试它。正如您在路由中看到的那样,编辑路由在节目上方,并且 url 符合编辑路由的约束,但仍然是节目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2019-09-02
    相关资源
    最近更新 更多