【问题标题】:Rails specify controller actionRails 指定控制器动作
【发布时间】:2013-07-11 06:04:28
【问题描述】:

我有一个文件夹 views/home,其中包含 Rails 应用程序的初始屏幕。

对于某些用户,home.index.html.erb 显示包含工作订单列表的部分内容。

换句话说,我正在从 home/index.html.erb 获取工作订单列表和磨损任务列表 - 因此,我添加了代码以将 @workorders 和 @worequests 读取到家庭控制器中。

这是获取工单的代码:

<% @workorders.notcompl.each do |workorder| %>

家庭控制器包含此代码以获取工作订单:

def index
  @workorders = Workorder.all

我想让 _agentopenrequests.html.erb 获取所有磨损的任务。 所以,我添加了以下内容来获取磨损的任务:

def index2
  @worequests = Worequest.all

但是,在从 home/index.html.erb 文件执行的部分内容中,如何让下面的行使用 index2 而不是 index

  <% @worequests.notcompl.each do |worequest| %>

我应该将@worequests 和@workorders 都放入index 吗?


更新1

我尝试将家庭控制器更改为:

 def index
   @workorders = Workorder.all

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

   @worequests = Worequest.all

   respond_to do |format|
     format.html # index.html.erb
   end
 end

但是,我明白了

DoubleRenderError - Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action.

更新2

将部分放在 wearquests 文件夹而不是 home 文件夹中是否更有意义 - 所以,使用 wearquests 控制器?

【问题讨论】:

  • 很抱歉,但对我来说,您的要求并不是很清楚..
  • 对于 UPDATE2,渲染部分时不会调用控制器。您可以将局部视图放在任何视图文件夹中。只要您从视图中调用正确的路径,它们就会呈现。

标签: ruby-on-rails


【解决方案1】:

如果index2 所做的只是拉取一系列磨损任务,您可以将其复制/移动到index 操作。

【讨论】:

  • zeantsoi 的回答是我的一个可视化。分配两个实例变量(一个用于Workorder.all,一个用于Worequest.all),然后调用一个respond_to 块。此操作中定义的实例方法将可用于从它渲染的所有布局和部分。
  • 换句话说,您不必在每次分配新的实例变量时重新渲染视图。分配任意数量,然后渲染一次。 ALL 实例变量将在渲染时传递给视图。
猜你喜欢
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多