如何从视图中调用控制器中的方法,然后在同一视图中迭代从方法返回的值

时间:2012-07-30 11:17:20

标签: ruby-on-rails

我有一个场景,我从视图中调用一个Controller方法,它返回一个页面数组,可以是nil或必须有values.i需要在for循环中迭代该数组以生成动态在我的view.pls帮助中列出

1 个答案:

答案 0 :(得分:0)

在控制器中实现逻辑通常不应该是move logic into the corresponding model

但如果您真的想要,可以使用controller变量从您的视图中访问实际的控制器。

示例:

<p>
Now we're printing out the result of the some_method:
<%= controller.some_method.inspect %>
</p>

迭代返回的值很简单:

<ul>
<% controller.some_method.each do |item| -%>
  <li>item.inspect</li>
<% end -%>
</ul>

控制器中方法的可见性可能不公开,因此您可能需要使用Object#send方法。

<%= controller.send(:my_protected_method).inspect %>

更新

要处理nil响应,我会在ApplicationHelper类中创建一个帮助方法:

def my_method
  (controller.my_method || [])
end

然后在视图中:

<% my_method.each do |item| -%>
  <%= item.inspect %>
<% end %->