ActionController::UrlGenerationErr 或:没有路由匹配 {:action=>"show", :controller=>"profiles"} 缺少必需的键:[:user_id]
ActionController::UrlGenerationErr or: No route matches {:action=>"show", :controller=>"profiles"} missing required keys: [:user_id]
我在用户注册测试中遇到错误 ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"profiles"} missing required keys: [:user_id]
。用户在注册后被重定向到用户的个人资料,但我的测试失败了。下面是我的一些代码行..
在会话控制器中创建动作
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_back_or user_profile_path(user, @profile)
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
在用户控制器中创建动作
def create
@user = User.new(user_params)
if @user.save
log_in @user
flash[:success] = "Welcome to the Mini Olympics"
redirect_to user_profile_path(current_user, @profile)
else
render 'new'
end
end
注册测试(包含有效信息)
test "valid signup information" do
get signup_path
assert_difference 'User.count', 1 do
post_via_redirect user_profile_path, user: { email: "user@example.com",
password: "password",
password_confirmation: "password",
profile_atrributes: {user_id: @user.id, name: "Example Test", street: "24 Fred Rd", city: "Cutlin", state: "SW", zipcode: "35478"}}
end
assert_template 'profiles/show'
assert is_logged_in?
end
测试在第 post_via_redirect
行失败,但实际应用程序有效。
在测试中,user_profile_path
缺少它的参数。应该是
post_via_redirect user_profile_path(user), user: { ... }
我在用户注册测试中遇到错误 ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"profiles"} missing required keys: [:user_id]
。用户在注册后被重定向到用户的个人资料,但我的测试失败了。下面是我的一些代码行..
在会话控制器中创建动作
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_back_or user_profile_path(user, @profile)
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
在用户控制器中创建动作
def create
@user = User.new(user_params)
if @user.save
log_in @user
flash[:success] = "Welcome to the Mini Olympics"
redirect_to user_profile_path(current_user, @profile)
else
render 'new'
end
end
注册测试(包含有效信息)
test "valid signup information" do
get signup_path
assert_difference 'User.count', 1 do
post_via_redirect user_profile_path, user: { email: "user@example.com",
password: "password",
password_confirmation: "password",
profile_atrributes: {user_id: @user.id, name: "Example Test", street: "24 Fred Rd", city: "Cutlin", state: "SW", zipcode: "35478"}}
end
assert_template 'profiles/show'
assert is_logged_in?
end
测试在第 post_via_redirect
行失败,但实际应用程序有效。
在测试中,user_profile_path
缺少它的参数。应该是
post_via_redirect user_profile_path(user), user: { ... }