0


CommandsController には次の 2 つのメソッドがあります。

class CommandsController < ApplicationController
.
.
.

def userslist
    @command = Command.find_by(id: params[:id])
    @users_list = @command.users.paginate(page: params[:page], per_page: 10)
end

def deleteuser
    user = User.find_by(id: params[:id])
    user.commands.destroy(@command)
    flash[:success] = "Utente eliminato dalla lista con successo"
    redirect_to list_path(@command)
end
.
.
.  

end

deleteuser メソッドを実行すると、次のエラーが表示されます:
Command(#31369720) expected, got NilClass(#19349600) related to lineuser.commands.destroy(@command) これは、@command が nil であることを意味しますが、なぜそうなるのでしょうか? @command は、クラスのすべてのメソッドから見えるインスタンス変数ではありませんか?


PS deleteuser メソッドを呼び出すには、userslist メソッドを使用する必要があるため、@command は確かに nil ではありません。

4

2 に答える 2

3

メソッド@commandを呼び出すときにインスタンス変数が設定されていないdeleteuserため、 と評価されnilます。

このエラーが発生する理由は、おそらく Rails コントローラーの仕組みを誤解しているためです。Rails は、このコントローラーに関するすべてのリクエストでコマンド コントローラーの新しいインスタンスを作成するため@command、前のアクションでインスタンス変数を設定したとしても、新しいリクエストではnil再びそうなります。

Rails/Ruby の基本と規則 (命名規則を含む) を学ぶことをお勧めします。

于 2013-09-24T10:03:05.813 に答える
0

別のプライベート メソッドを作成し@commandて宣言し、コントローラー クラスの宣言後に before_filter で呼び出すことができます。

于 2013-09-24T10:10:28.687 に答える