Rails if控制器索引中的语句

时间:2013-08-16 19:12:26

标签: ruby-on-rails

我有一个使用Bootstrap选项卡的Rails应用程序。 每个选项卡显示从部分呈现的dataTable。 dataTables正在使用文件中定义的ajax代码: workorders3_datatable.rb和workorders4_datatable.rb。

这是索引代码:

<div class="tab-pane" id="tab2">
<%= render :partial => "workorders/index7", locals: {workorders: @workorders, tab: 2} %>
</div>
<div class="tab-pane" id="tab3">
<%= render :partial => "workorders/index8", locals: {workorders: @workorders, tab: 3} %>

这是我正在努力工作的控制器代码:

def index

@workorders = Workorder.all
@tab = :tab

respond_to do |format|
  format.html # index.html.erb
  if @tab == 2
    format.json { render json: Workorders3Datatable.new(view_context) }
  else
    format.json { render json: Workorders4Datatable.new(view_context) }
  end
end

我确定if声明是错误的。

感谢您的帮助。

UPDATE1

(这很难解释)

但是,我需要json来自tab2的文件Workorders3Datatable和tab3的Workorders4Datatable

那么,如何编写if stmt来测试tab2与tab3的对比?

UPDATE2

我将视图代码更改为此 - 但是,它仍然会对两个标签视图使用Workorders4Datatable

<div class="tab-pane" id="tab2">
  <%= render :partial => "workorders/index7", :locals => {:workorders => @workorders, :tab_id => 2} %>
</div>
<div class="tab-pane" id="tab3">
  <%= render :partial => "workorders/index8", :locals => {:workorders => @workorders, :tab_id => 3} %>
<div>

控制器:

respond_to do |format|
  format.html # index.html.erb
  puts "PUTS +++++++++++++ tab_id:" + params[:tab_id].to_s
  if params[:tab_id] == 2
    format.json { render json: Workorders3Datatable.new(view_context) }
  else
    format.json { render json: Workorders4Datatable.new(view_context) }
  end
end

puts语句将tab_id显示为nil 控制器没有进入参数

UPDATE3

我正在尝试不同的东西 - 在控制器中有单独的动作

查看代码:

<div class="tab-pane" id="tab2">
  <%= render :partial => "workorders/index7", :action => :index2 %>
</div>
<div class="tab-pane" id="tab3">
  <%= render :partial => "workorders/index8", :action => :index3 %>
</div>

控制器(我不得不留下索引或不显示)

  def index
  puts "PUTS +++++++++++ index"

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: Workorders3Datatable.new(view_context) }
  end

end

  def index2
  puts "PUTS +++++++++++ index2"

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: Workorders3Datatable.new(view_context) }
  end

end

  def index3
  puts "PUTS +++++++++++ index3"

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: Workorders4Datatable.new(view_context) }
  end

end

最终一直使用index

PS - 也尝试了

<%= render :partial => "workorders/index7", :action => "index2" %>

2 个答案:

答案 0 :(得分:2)

我不确定我是否理解您要完成的任务,但if语句可能会失败,因为Workorder.all永远不会返回nil。如果数据库中没有任何工作人员,则只返回[]。你应该做的

if @workorders3.present?

答案 1 :(得分:0)

ActiveRecord查询不能是nil,但可能是empty?