0

JSONリクエストから受け取ったパラメーターを単純に保存したいのですがtoken、実際に保存されているかどうかを表示できません。JSONパラメーターを使用してPOSTリクエストを実行すると、Railsがそれをcreateメソッドにルーティングすることを確認しました。そして、グローバル変数属性(この場合はtoken )を設定しましたが、 index.html.erbにリダイレクトすると、以下のエラーが発生します。

<h1>
  NoMethodError in
  Inits#show
</h1>

<p>
  Showing <i>/Users/alioral/Desktop/Rails/testApp2/app/views/inits/show.html.erb</i> where line <b>#3</b> raised:
  <pre><code>undefined method `token' for nil:NilClass</code></pre>
</p>

これが私のコントローラークラスです。

class InitsController < ApplicationController
  def index
  end
  def show
  end
  def create
      @init=Init.new("token"=>params[:token])
      @init.save
      respond_to do |format|
        format.html { redirect_to @init }
        format.json { render json: @init }
      end
  end
end

そして念のため、ここに私が生成したモデルがあります(足場を使用せずに)。

class Init < ActiveRecord::Base
  attr_accessible :token
end

これが私のshow.html.erbファイルです。

<h1>Hello, World</h1>
<b>The token is:</b>
<%= @init.token%>
4

2 に答える 2

1

まず、createはインデックスにリダイレクトせず、新しく作成された@initパスにリダイレクトします。次に、show hamlファイルに@init.tokenへの参照(3行目)が含まれているようです。@ initはnilであるため、このエラーが発生します。

于 2012-09-10T21:01:16.897 に答える
0

インスタンス変数(@で始まる変数)は、リダイレクト後も存続しません。リクエストごとに、@init変数が設定されていない状態でコントローラーの新しいインスタンスが作成されます。

呼び出すrender ...と元の@initのままですが、redirectを呼び出すと、クライアントは新しいHTTPリクエストを発行し、サーバー側で新しいコントローラーがインスタンス化さ@initれ、#showアクションはnilになります。

更新:コントローラーでは、showメソッドに次のようなものが必要です。

def show
  @init = Init.find(params[:id])
end
于 2012-09-10T21:07:33.053 に答える