在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,@ party_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
视图中仍然可以看到相同的两个实例变量。换句话说,来自操作的所有实例变量都可以在视图中使用。
问题:我为什么要将实例变量放在respond_to行上?
答案 0 :(得分:1)
您是正确的,您可以在相应的视图中访问您在操作方法中设置的任何实例变量。在您的情况下,您只是将id设置为实例变量,而不是实际资源(即@survey = Survey.find_by_program_id(params[:program_id])
)
respond_with将发送一个响应,其中包含您为其提供的资源的相应格式...因此您不会对所有实例变量使用respond_with,而是将其用于资源。如果您添加了:json
等其他格式,那么如果请求是survey.json
,则respond_with
会将您的@survey
资源转换为相应的json格式。
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
不确定这对您是否完全合理,但this article可能会有所帮助。