Ruby on rails 如何使用来自同一rails控制器的不同RJS模板?

Ruby on rails 如何使用来自同一rails控制器的不同RJS模板?,ruby-on-rails,ruby,rjs,Ruby On Rails,Ruby,Rjs,我有一个控制器方法,它返回一个下拉列表,下拉列表在分部中呈现,但根据分部的使用位置,RJS模板需要不同。我是否可以向控制器传递一个参数,以确定使用哪个RJ 以下是控制器方法,非常简单: def services respond_to do |format| format.js { @type = HospitalCriteria.find_by_id(params[:type_id]) @services = @type.children.al

我有一个控制器方法,它返回一个下拉列表,下拉列表在分部中呈现,但根据分部的使用位置,RJS模板需要不同。我是否可以向控制器传递一个参数,以确定使用哪个RJ

以下是控制器方法,非常简单:

def services
   respond_to do |format|
     format.js {
       @type     = HospitalCriteria.find_by_id(params[:type_id])
       @services = @type.children.all
     }
   end
end
这是自动渲染的rjs模板

page.replace_html 'select_service', :partial => 'hospital/services'
page.replace_html 'select_condition', :partial => 'hospital/conditions'
page.replace_html 'select_procedure', :partial => 'hospital/procedures'

page << 'if ($("chosenType") != null) {'
  page.replace_html 'chosenType', @type.name
  page.replace_html 'chosenService', 'Selected Service'
  page.replace_html 'chosenCondition', 'Selected Condition'
  page.replace_html 'chosenProcedure', 'Selected Procedure'
page << '}'
page.replace\u html‘选择服务’,:partial=>‘医院/服务’
page.replace_html‘选择条件’,:partial=>‘医院/条件’
page.replace_html“选择_程序”,:partial=>“医院/程序”
page类似于:

if params[:use_alternate]
  render :template => alternate.rjs and return
end

我喜欢Mike的回答,但从设计的角度考虑:

在我看来,这应该是在视图层——如果动作在语义上是相同的,但是表示是不同的,可能有两个不同的rjs部分,并且执行下面这样的操作更符合MVC

if params[:use_alternate]
  render :partial => "case_1.rjs"
else
  render :partial => "case_2.rjs"
end

为了保持整洁,我有两个控制器方法来呈现两个不同的RJS。然后,我在两个控制器方法调用的公共保护方法中设置@type和@services


在我看来,在每种情况下,您要求的是不同的东西,因此请调用不同的控制器方法。传递一个标志来改变方法的工作方式只是一个技巧,当你有3个、4个或5个位置时,它不会很好地扩展。即使您将生成更多的代码,也会更容易维护。

将条件逻辑放在onerjs模板中如何

# services.rjs

if @type == "your conditions"
  # your rjs updates
else
  # your other rjs updates
end
这为您提供了一个更干净的控制器,并且省去了维护多个rjs模板的麻烦