response_with中模型变量的用途

在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 

在视图中仍然可以看到相同的两个实例变量。 换句话说,来自操作的所有实例变量都可以在视图中使用。

问题:为什么我要将实例变量放在respond_to行上?

您是正确的,您可以在相应的视图中访问您在操作方法中设置的任何实例变量。 在您的情况下,您只是将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 

不确定这是否对您有意义,但本文可能会有所帮助。