【问题标题】:No route matches {:action=>"show", :controller=>"user_profiles", :id=>nil, :user_id=>"2"} missing required keys: [:id]没有路由匹配 {:action=>"show", :controller=>"user_profiles", :id=>nil, :user_id=>"2"} 缺少必需的键:[:id]
【发布时间】:2014-12-17 05:44:32
【问题描述】:

在创建 user_profile 后,当我想重定向以显示操作时,我的路线出现错误。

控制器

class UserProfilesController < ApplicationController

    def create
        @user = User.find(current_user.id) 
        @profile = UserProfile.find_by_user_id(@user)

        if @user_profile = @user.create_user_profile(user_params)
            redirect_to user_user_profile_url(@user,@profile)
        end
    end

    def show
        @user_profile = @user.user_profile
    end

    private

    def user_params
        params.require(:user_profile).permit(:firstname, :lastname, :birthdate, :street_address, :city_address, :country, :contact_number, :avatar)
    end
end

routes.rb

 resources :users do
    resources :user_profiles
  end

谢谢!

【问题讨论】:

  • 您是如何尝试解决框架给您的错误的?
  • 你能发布这个错误的堆栈跟踪吗?
  • ActionController::UrlGenerationError (没有路由匹配 {:action=>"show", :controller=>"user_profiles", :id=>nil, :user_id=>"2"} 缺少必需的键: [:id]): app/controllers/user_profiles_controller.rb:13:in `create' -- 这是你要找的堆栈跟踪吗?
  • 是的先生,我尝试了很多选项..在我以前的控制器中我成功地重定向了它,但在这里我不知道为什么。

标签: ruby-on-rails ruby ruby-on-rails-4 routes


【解决方案1】:

@profile 实例变量很可能是 nil,因为您要创建一个新配置文件,而不是更新现有配置文件。尝试重定向到新创建的配置文件。

def create
    @user = User.find(current_user.id) 
    @profile = UserProfile.find_by_user_id(@user)

    if @user_profile = @user.create_user_profile(user_params)
        redirect_to user_user_profile_url(@user,@user_profile)
    end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 2016-12-14
    相关资源
    最近更新 更多