私はこれまでレールを学習するためのMichael Hartlチュートリアルに従ってきましたが、これまでかなりうまく行っていましたが、私が繰り返し遭遇した問題。私は、私の環境や他の何かに設定上の問題があるかどうかを知るには熟練していませんが、これは意味がありません。ActionController :: UrlGenerationError:ルートが一致しません{:action => "/ users/762146111"
私が実行しようとしているコントローラテストの中で、ヘルパーURLメソッドを動作させることはできません。例として:
test "should redirect home when not an admin" do
log_in_as(@other_user)
assert_no_difference 'User.count' do
delete user_path(@user)
end
assert redirect_to root_url
end
は、次のエラーを生成します
test "should redirect index when not logged in" do
get users_path
assert_redirected_to login_url
end
よう
ERROR["test_should_redirect_home_when_not_an_admin", UsersControllerTest, 0.9899668790167198]
test_should_redirect_home_when_not_an_admin#UsersControllerTest (0.99s)
ActionController::UrlGenerationError: ActionController::UrlGenerationError: No route matches {:action=>"https://stackoverflow.com/users/762146111", :controller=>"users"}
test/controllers/users_controller_test.rb:60:in `block (2 levels) in <class:UsersControllerTest>'
test/controllers/users_controller_test.rb:59:in `block in <class:UsersControllerTest>'
であっても、簡単なテストでは、同じエラーを生成:私はしました
ERROR["test_should_redirect_index_when_not_logged_in", UsersControllerTest, 1.5291320629185066]
test_should_redirect_index_when_not_logged_in#UsersControllerTest (1.53s)
ActionController::UrlGenerationError: ActionController::UrlGenerationError: No route matches {:action=>"/users", :controller=>"users"}
test/controllers/users_controller_test.rb:34:in `block in <class:UsersControllerTest>'
すべてこの問題についてのグーグルは、助けていない何らかの理由で私はuser_pathメソッド(または他の同様のメソッド)を何とか判断できないので、私のコントローラで取ろうとしているアクションがパスだと思っています!
ルートファイルが正しく設定されていることを確認しました。
Rails.application.routes.drawは
root 'static_pages#home'
get '/help' => 'static_pages#help'
get '/about' => 'static_pages#about'
get '/contact' => 'static_pages#contact'
get '/signup' => 'users#new'
post '/signup' => 'users#create'
get '/login' => 'sessions#new'
post '/login' => 'sessions#create'
delete '/logout' => 'sessions#destroy'
get 'sessions/new'
resources :users
end
を行い、私は "レールのルート" を実行すると、正しいルートを持っていることをチェックしました。私はレールコンソールで "app.user_path(1)"が有効なパスを吐いていることをチェックしました。
この時点で私はちょうどこれらのヘルパーメソッドが助けにならないように見えない理由について困惑しています...私も彼らの実際に呼び出されていることはわかりませんので、私のグーグルはかなり無益でした。
はチュートリアルでこの問題を回避するために、私が動作しているようですpatch :edit, { id: @user }, params: { user: { name: @user.name,
email: @user.email }}
それとも
test "should redirect index when not logged in" do
get :index
assert_redirected_to login_url
end
のような構文を使用してきました。それが役に立つかどう
はまたここに私のテストファイルの1つです:
require 'test_helper'
class UsersControllerTest < ActionController::TestCase
def setup
@user = users(:michael)
@other_user = users(:archer)
end
test "should get new" do
get :new
assert_response :success
end
test "should redirect edit when user not logged in" do
get :edit, params: { id: @user }
assert_not flash.empty?
assert_redirected_to login_url
end
test "should redirect update when user not logged in" do
patch :edit, { id: @user }, params: { user: { name: @user.name,
email: @user.email }}
assert_not flash.empty?
assert_redirected_to login_url
end
test "should redirect index when not logged in" do
# get users_path
get :index
assert_redirected_to login_url
end
test "should redirect destroy when not logged in" do
assert_no_difference 'User.count' do
delete user_path(@user)
end
assert redirect_to login_url
end
test "should redirect home when not an admin" do
log_in_as(@other_user)
assert_no_difference 'User.count' do
delete user_path(@user)
end
assert redirect_to root_url
end
end
は私が私が参考になるように投稿することができ、他のどのようなファイルお知らせください。