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: { ... }