1

フォロー/フォロー解除ボタンを作成しようとしましたが、インデックス アクションにエラーがあります。

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

users_controller.rb:

class UsersController < ApplicationController
  before_filter :authenticate_user!
  def index
    @user = User.find(params[:id])
  end
end

params[:id]であることがわかりましたnil。私は Rails に非常に慣れていないので、それがなぜなのか理解できませんnil

誰かが私が間違っていることを説明できますか?

4

1 に答える 1

3

実行rake routesすると、どのルートが を使用し、どのルートが使用しないかがわかります。id出力例:

GET     /photos             index   
GET     /photos/new         new
POST    /photos create      create
GET     /photos/:id         show
GET     /photos/:id/edit    edit
PUT     /photos/:id         update
DELETE  /photos/:id         destroy

したがって、上記では、、、およびshowルートのみがeditupdatedestroyid

ルートを変更していない限り、index通常はコレクションに使用されるため、次のようになります。

def index
  @users = User.all # no id used here, retreiving all users instead
end

もちろん、次のようにルートを自由に構成できます。

get "users/this-is-my-special-route/:id", to: "users#index"

次に、usersアクションlocalhost:3000/users/this-is-my-special-route/12を呼び出します。indexこの場合、そのようなインデックスを変更するよりも、それに対応する新しいルートとアクションを作成する方がよいでしょう。

Rails でのルーティングの詳細については、こちらを参照してください。

于 2013-05-12T07:00:51.527 に答える