ruby on rails控制器中的一个函数有不同的视图

时间:2014-10-09 09:04:06

标签: ruby-on-rails

 class HellosController < ApplicationController


  def index
  #do sth here 
  end

  def new
    #do sth here
  end

  def edit
    #do sth here
  end

  def report
  #how can I  display  different format of report according to diff value of a variable ?      
  end

end

我知道控制器中的每个不同功能都可以有一个视图,现在我将此报告链接到报告视图。我需要为该项目添加报告视图。

如何根据@reportType变量显示不同的视图? 我需要添加到控制器中的内容?我应该如何命名添加的报告视图?

4 个答案:

答案 0 :(得分:2)

您可以查看@report_type

中的report.html.erb

例如: 在 report.html.erb

<% if @report_type == "this" %>
<%= render partial: "this" %>
<% elsif @report_type == "that" %>
<%= render partial: "that" %>
<% end %>

这里你将有两个部分,如

_this.html.erb _that.html.erb

通过这种方式,您可以根据报告类型拥有适当页面的多个视图。

答案 1 :(得分:1)

在控制器中,您可以使用if condition

呈现不同的页面

例如:

if [condition]
  render "abc"
else
  render "xyz"
end

答案 2 :(得分:1)

够容易。这种事情的一个简单例子可能是:

class ReportsController < ApplicationController
  def show
    @report = Report.find(params[:report_id])
    if @report.type == "special"
      # This will render app/view/special_report.html.erb
      render :special_report
    else
      # This will render app/view/report.html.erb
      render :report
    end
  end
end

当然,还有更多,look at the Rails guides for other options。注意我使用符号来指定视图。您不必这样做,字符串也可以,例如"report""special_report"

答案 3 :(得分:0)

在您的链接中发送report_id作为参数

= link_to "See report", your_report_path + "?report_id=" + report.id

report行动中

def report
  @reportType = ReportModel.find params(:report_id)
end

report.html.erb中,您可以使用此变量,例如

Name of the report is <%= @reportType.name %>