我想在Rails中的div中渲染控制器/动作

时间:2012-04-20 10:59:28

标签: ruby-on-rails module

假设我有一个名为“Statistics”或“Friends”的300X300px块,这个块需要一些数据库对象和逻辑操作,这些操作传统上应放在控制器内,这样就可以准备好一些实例变量,这些变量将很好地显示在它的视图中/部分。

可以从我网站的许多页面调用此块,跨越各种控制器和操作。

如何在不重复控制器内部代码的情况下解决此问题,也不将逻辑放在视图中。

一个糟糕的解决方案是将SQL查询放在视图中,或者使用iframe,其中单个控制器/操作生成预期的HTML。

任何想法都将不胜感激。

3 个答案:

答案 0 :(得分:3)

我认为这是你应该在辅助方法中做的事情。使用locals代替实例变量而不是污染视图的命名空间可能是个好主意:

module ApplicatonHelper

  def friends_block
    friends = Friend.where(...)
    # Assuming the 'friends_block' partial is in a directory 'app/views/shared'
    render :partial => "shared/friends_block", :locals => {:friends => friends}  
  end

end

friends_block部分将使用局部变量:

<div id="friends_block">
  <% friends.each do |s| %>
    ...
  <% end %>
</div>

其他视图只使用辅助方法而不必担心其他任何问题:

<%= friends_block %>

答案 1 :(得分:2)

看一下Cells gem: https://github.com/apotonick/cells

答案 2 :(得分:1)

我将块放在一个部分中,并确保该块的必需实例变量在相关控制器和操作的before_filter中加载。