0

Rails 3では、新しいrespond_toおよびrespond_with構文を使用して、次のようにします。

class SurveysController < ApplicationController
  respond_to :html

  def survey
    @program_id = params[:program_id]
    @participant_id = params[:participant_id]
    respond_with [@program_id, @participant_id]
  end
end

ビューが表示されると(survey.html.erb)、変数program_id、@participant_idは両方とも適切に設定されます。ただし、次のように、respond_withからそれらを省略した場合:

class SurveysController < ApplicationController
  respond_to :html

  def survey
    @program_id = params[:program_id]
    @participant_id = params[:participant_id]
    @foo = "foo"
    respond_with @foo
  end
end

同じ2つのインスタンス変数が引き続きビューに表示されます。つまり、アクションのすべてのインスタンス変数がビュー内から利用可能になります。

質問:respond_to行にインスタンス変数を配置する必要があるのはなぜですか?

4

1 に答える 1

1

アクションメソッドで設定したインスタンス変数は、対応するビューでアクセスできるというのは正しいことです。あなたの場合、実際のリソースではなく、インスタンス変数にIDを設定しているだけです(つまり@survey = Survey.find_by_program_id(params[:program_id])

response_withは、指定したリソースに適切な形式で応答を送信します...したがって、すべてのインスタンス変数にrespond_withを使用するのではなく、リソースに使用します。のような追加の形式を追加した:json場合、リクエストがの場合、はsurvey.jsonリソースを適切なjson形式にrespond_with変換します。@survey

respond_to :html, :json
def survey
  @program_id = params[:program_id]
  @participant_id = params[:participant_id]
  @survey = Survey.find_by_program_id(params[:program_id])
  respond_with @survey
end

それがあなたにとって完全に理にかなっているのかどうかはわかりませんが、この記事は役立つかもしれません。

于 2012-11-07T20:51:34.607 に答える