0

私はAPIコントローラーを開発しています。当然のことながら、応答がクライアントに送信される前に、データの「グルーミング」を行います。この目的のために、私はいくつかの特殊なプライベート メソッドを用意しています。「resp」というコントローラーにインスタンス変数を設定し (「response」は Rails の予約語のようです)、これらのメソッドで応答をやり取りするのではなく、直接変更できるようにしたいと考えています。だから私は宣言します

attr_accessor :resp

次のようにエンドポイントの1つに設定します

resp = movie.hash_attributes_for_movie_details(current_user)

resp がこのように設定されておらず、最終的に nil になるため、これによりエラーが発生します。インスタンス変数を直接設定すると

@resp = movie.hash_attributes_for_movie_details(current_user)

「取得」できますが、セッターは何も設定していません。私は何が欠けていますか?

前もって感謝します。

4

1 に答える 1

2

同じオブジェクトでセッターを使用する場合、Ruby には落とし穴があります。構文 を使用する必要がありますself.setter = value。そうしないと、Ruby はローカル変数を作成していると見なします。

したがって、あなたの場合、コードを次のように変更する必要があります。

self.resp = movie.hash_attributes_for_movie_details(current_user)

はい、少し面倒ですが、ローカル変数の構文とメソッドの構文を同じにするために支払わなければならないトレードオフです。

于 2013-11-09T04:21:50.267 に答える