3

レールを 3.2.0 から 3.2.2 にアップグレードするときに、ルーティングに問題があります。

ルート ヘルパーを使用して新しいルートを生成すると、ヘルパーが機能し、次のようなリンクが生成されます。

/things/new

ただし、リンクにアクセスすると、ルーティングエラーがスローされます...

Routing Error
No route matches {:action=>"edit", :controller=>"app/things", :id=>#<Thing id: nil, title: n....

新しいものではなく、編集URLアクションと間違えます。

ルートには何もありませんが……。

  scope :module => :app, :as => :app, :constraints => { :subdomain => /app/ } do
     resources :things
  end

誰かがこれを経験したことがありますか、または何が起こっているのか知っていますか?

ありがとう。

詳細...

レーキ ルート:

    app_things GET    /things(.:format)                                    app/things#index {:subdomain=>/app/}
               POST   /things(.:format)                                    app/things#create {:subdomain=>/app/}
 new_app_thing GET    /things/new(.:format)                                app/things#new {:subdomain=>/app/}
edit_app_thing GET    /things/:id/edit(.:format)                           app/things#edit {:subdomain=>/app/}
     app_thing GET    /things/:id(.:format)                                app/things#show {:subdomain=>/app/}
               PUT    /things/:id(.:format)                                app/things#update {:subdomain=>/app/}
               DELETE /things/:id(.:format)                                app/things#destroy {:subdomain=>/app/}

カール:

curl -IL http://app.testapp.com/things/new
HTTP/1.1 404 Not Found 

ログから (スタック トレース?):

    Started GET "/things/new" for 127.0.0.1 at 2012-04-24 19:27:02 +0100
Processing by App::ThingsController#new as HTML
  Rendered app/things/_new_form.html.erb (2.0ms)
  Rendered app/things/new.html.erb within layouts/app (2.7ms)
  Rendered layouts/_app_includes.html.erb (11.0ms)
  Rendered app/nav/_things_new.html.erb (1.6ms)
  Rendered app/nav/_menu_wrapper.html.erb (2.1ms)
Completed 500 Internal Server Error in 21ms

ActionController::RoutingError (No route matches {:action=>"edit", :controller=>"app/things", :id=>#<Thing id: nil, title: nil, created_at: nil, updated_at: nil, account_id: nil>}):
  app/views/app/nav/_step_1_title.html.erb:2:in `_app_views_app_nav__step___title_html_erb__3644446743043796555_70280275307960'
  app/views/app/nav/_things_new.html.erb:1:in `_app_views_app_nav__things_new_html_erb__4471631226426153422_70280275315660'
  app/views/app/nav/_menu_wrapper.html.erb:8:in `_app_views_app_nav__menu_wrapper_html_erb___3003322303253991863_70280275346820'
  app/views/layouts/app.html.erb:32:in `_app_views_layouts_app_html_erb__4514085623626236526_70280285513740'


  Rendered /Users/blerg/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.2.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.6ms)
4

4 に答える 4

6

/things/new問題を引き起こしているのはルート自体ではないと思います。edit_app_thing_pathオブジェクト パラメータが nil であるか欠落しているへの呼び出しを含む、レンダリングされているもの (たとえば、_nav メニューの 1 つ) があります。

于 2012-04-24T18:50:05.130 に答える
4

"/things/new" にアクセスしたときに完全なスタック トレースを確認するには、development.log ファイルを確認してください。ログから何が問題なのかがわからない場合は、ここに投稿してください。

一見すると、edit_thing_path(@thing)呼び出しに問題があるように見えます。新しいレコードをそれに渡しています-#<Thing id: nil...そのエラーメッセージに表示されます。

于 2012-04-18T08:37:07.710 に答える
2

ここでは問題なく動作します。

Smickie さんに何を伝えたらよいかわかりません。あなたの状況を再現したところ、うまくいきました。詳細は次のとおりです。

Railsのバージョン

$ bundle exec rails -v
Rails 3.2.2

Routes.rb

scope :module => :app, :as => :app, :constraints => { :subdomain => /app/ } do
  resources :things
end

レーキルート

$ bundle exec rake routes
    app_things GET    /things(.:format)          app/things#index {:subdomain=>/app/}
               POST   /things(.:format)          app/things#create {:subdomain=>/app/}
 new_app_thing GET    /things/new(.:format)      app/things#new {:subdomain=>/app/}
edit_app_thing GET    /things/:id/edit(.:format) app/things#edit {:subdomain=>/app/}
     app_thing GET    /things/:id(.:format)      app/things#show {:subdomain=>/app/}
               PUT    /things/:id(.:format)      app/things#update {:subdomain=>/app/}
               DELETE /things/:id(.:format)      app/things#destroy {:subdomain=>/app/}

取得things/new

$ curl -IL http://app.test.dev:3001/things/new
HTTP/1.1 200 OK
...

マシンから同じ詳細を投稿すると、怪しいものがわかります。

于 2012-04-21T16:18:13.877 に答える
0

これを使って:

scope "/app" do
  resources :things
end
于 2012-05-01T03:01:16.423 に答える