0

私はレールが初めてで、ネストされたルートに問題があります。

ユーザーがいて、それぞれが別のモデルに 1 つのプロファイルを持っています。ユーザー プロファイルにアクセスしようとしています

/users/1/profile

エラーが発生します:

ID のないユーザーが見つかりませんでした

要求パラメーターは次を示します。

{"user_id"=>"1"}

これに似た質問がありましたが、これに対する解決策が見つかりません。

ルート:

resources :users do
  resource :profile
end

プロファイル コントローラ:

class ProfilesController < ApplicationController
  def show
    @user_profile = User.find(params[:id]).profile
  end
end

ユーザーモデルから:

has_one :profile, dependent: :destroy
before_create :build_profile

プロファイル モデルから:

belongs_to :user

User.find(params[:id]).profileそれが私が間違っているところだと思います。を に変更するfind(params[:id])first、最初のユーザーのプロファイルが正常に返されます。

どんな助けにも感謝します!

4

2 に答える 2

1

ユーザー ID はparams[:user_id]. 渡されて解釈されるパラメーターについては、ログを確認してください。params[:id]ありません。

于 2013-08-11T15:43:00.707 に答える
0

私はあなたのルート設計に同意します。これは、単純なプロファイル表示の場合よりも複雑であってはなりません.

しかし、いくつかの問題があります:

  1. routes.rb のルートは

    resources :user do
      member do
        get 'profile'
      end
    end
    

    これにより、user/1/profileルートが許可されます

  2. profile上記のルーティングに従って、このメソッドはプロファイル コントローラーではなく、UsersController にある必要があります。(この場合、プロファイルコントローラーは必要ありません)

    class UsersController < ApplictionController
      def profile
        user = User.find(params[:id])
        @profile = user.profile
      end
    end
    
于 2013-08-11T15:49:05.830 に答える