Rails部分来自Bootstrap选项卡中的不同控制器

时间:2013-06-28 16:33:49

标签: ruby-on-rails

我有一个带有2个Bootstap标签的Home页面。我遇到了第二个标签的问题。我正在尝试渲染工作人员列表。对于该列表,我正在使用dataTables和ajax。

我的问题是workorders / index7.html.erb可以作为独立页面正常工作。但是,我想在主页上的Bootstrap选项卡中使用它。

对于我所有其他的Bootstrap选项卡列表,我在同一个控制器中使用了部分内容。但是,在这种情况下,我需要使用Workorder控制器中的视图而不是Home控制器。

这是我在Home视图中尝试的代码:

<div class="tab-pane" id="tab2">
  <%= render "workorders/index7" %>
</div>

那段代码给了我:

Missing partial workorders/index7

为什么?如果我将文件名更改为_index7.html.erb,则不会执行代码来获取json。

但是,因为它是部分的,从_开始,与index7的Workorder控制器代码的连接不起作用。我还在Workorder控制器中尝试了_index7

Workorder控制器有以下代码:

 def index7
   @workorders = Workorder.all

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

该代码使用名为workorders3_datatable.rb的文件通过ajax获取数据并为dataTables格式化。

问题:

1)我是否必须在Home标签中使用部分内容?或者有没有办法在选项卡中呈现名为workorders / index7.html.erb的文件?

2)为什么index7.html.erb使用index7的控制器代码,但如果我在控制器中将其称为_index7,那么部分_index7.html.erb将不会使用代码?

3)我读到这个“渲染将只渲染视图,它不会运行与之关联的动作。” - 是真的吗?

感谢您的帮助 - 我知道这很令人困惑。

Reddirt

更新1

视图作为工作程序/ index7运行良好 - 但是,如果我将其更改为部分并将其放在tab = workorders / _index7中 - 则index7的控制器代码似乎不会执行。

2 个答案:

答案 0 :(得分:0)

1)我是否必须在“主页”选项卡中使用部分?或者有没有办法在选项卡中查看名为workorders / index7.html的文件?

如果你想遵循这种方法。从Home控制器传递集合(@workorders = Workorder.all

然后在主视图中将其作为本地人传递给workorders/index7

<div class="tab-pane" id="tab2">
  <%= render "workorders/index7" locals: {workorders: @workorders} %>
</div>

这将使workorders/index7可以使用记住将变量更改为局部变量workorders

答案 1 :(得分:0)

您需要在主页的视图中加入:partial

<%= render :partial => "workorders/index7" %>

app/views/workorders文件夹需要一个名为_index7.html.erb的文件。要从当前设置中完成此操作,您可以将index7.html.erb的内容移动到此部分中,然后使用:

<%= render :partial => "index7" %> 
原始index7.html.erb中的

。这样,您可以将其作为整个页面呈现在您的主页中作为部分内容。