Rails 4在不同的控制器视图中呈现另一个控制器动作

时间:2015-03-05 04:20:24

标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller

这是我的问题。我基本上有控制器A.我想要做的是在控制器A的索引视图中显示控制器B的索引操作。

我是通过制作一个新的部分来实现这一点的,我将代码片段放入其中。然后我渲染了正确的部分,它给了我未定义的变量错误。我修复它的唯一方法是创建一个包含该模型对象的所有实例的实例变量。有用!但是......这是正确的方法吗?使用所有记录制作实例变量似乎很笨拙。

这是我的控制器A的索引视图。“Monthly_Challenges”是我的控制器B.

<%= render "monthly_challenges/index"  %>

<br>

这是我的偏爱。注意第1行,是吗?

<% @monthly_challenge = MonthlyChallenge.all %> #this seems not good
<p>
  <strong>Name:</strong>
  <%= @monthly_challenge.name %>
</p>

2 个答案:

答案 0 :(得分:3)

只需输入此行

@monthly_challenge = MonthlyChallenge.all

在A控制器的索引中:

def index 
  @monthly_challenge = MonthlyChallenge.all # from controller B
  #rest of code for controller A
end

然后在你看来

<p>
  <strong>Name:</strong>
  <%= @monthly_challenge.name %>
</p>

MonthlyChallenge是一个模型,可以在任何控制器中实例化。

答案 1 :(得分:1)

没有理由说你的控制器A不能编组MonthlyChallenge的实例。我建议将数据封送在视图之外是一件好事。

从我的一个项目的主页:

def index
  @projects = Project.find(:all, :limit => 5, :order => 'updated_at DESC')
  @scenarios = Scenario.find(:all, :limit => 5, :order => 'updated_at DESC')
  @unittests = Unittest.find(:all, :limit => 10, :order => 'updated_at DESC')
end

索引视图只渲染3个部分,每种类型的模型编组一个。