2

私は自分のテストの準備をするための簡単なテストプロジェクトを作成しています。私はネストされたリソースにかなり慣れていません。私の例では、ニュースアイテムがあり、各ニュースアイテムにはコメントがあります。

ルーティングは次のようになります。

resources :comments

resources :newsitems do
    resources :comments
end

現在、コメントの機能テストを設定していますが、いくつか問題が発生しました。

これにより、ニュースアイテムのコメントのインデックスが取得されます。@newsitemはcのセットアップで宣言されます。

test "should get index" do
    get :index,:newsitem_id => @newsitem
    assert_response :success
    assert_not_nil assigns(:newsitem)
end

しかし、問題はここ、「新しくなるべき」にあります。

 test "should get new" do
    get new_newsitem_comment_path(@newsitem)
    assert_response :success
 end

次のエラーが発生します。

ActionController::RoutingError: No route matches {:controller=>"comments", :action=>"/newsitems/1/comments/new"}

しかし、ルートテーブルを調べると、次のことがわかります。

new_newsitem_comment GET    /newsitems/:newsitem_id/comments/new(.:format)      {:action=>"new", :controller=>"comments"}

名前パスやここで間違っていることを使用できませんか?

前もって感謝します。

4

2 に答える 2

7

問題は、テストで URL を指定する方法にあります。エラーメッセージは次のとおりです。

No route matches {:controller=>"comments", :action=>"/newsitems/1/comments/new"}

もちろん、「/newsitems/1/comments/new」というアクションはありません。hash を渡したい { :controller => :comments, :action => :new, :news_item_id => 1 }

正しい構文は次のとおりです。

get :new, :news_item_id => 1
于 2011-01-06T20:18:27.160 に答える
0

(Rails 3 を想定)

あなたの中でこれを試してくださいroutes.rb

GET    'newsitems/:newsitem_id/comments/new(.:format)' => 'comments#new', :as => :new_newsitem_comment
于 2011-01-06T13:49:03.207 に答える