Rails 3 使用参数渲染局部视图

12

我在传递参数给一个partial时遇到了问题。无论我尝试什么,参数都无法在partial被渲染时传递。

我正在使用一个基于jquery的选项卡布局,每个选项卡显示特定状态下的工作订单,还依据一段时间范围来显示。

我使用的是参数:sort_filter和:status_filter来实现这一点。

这里是我的原始代码,但我想改变它,以便在link_to中呈现partials,而不是像这里列出的方式:

         <ul>
            <li><%= link_to "Active", work_orders_path(params.merge({:status_filter => "A", :sort_filter => params[:sort_filter]}))  %></li>
            <li><%= link_to "On Hold", work_orders_path(params.merge({:status_filter => "H", :sort_filter => params[:sort_filter]}))  %></li>
            <li><%= link_to "Completed", work_orders_path(params.merge({:status_filter => "C", :sort_filter => params[:sort_filter]}))  %></li>
            <li><%= link_to "Billed", work_orders_path(params.merge({:status_filter => "B", :sort_filter => params[:sort_filter]}))  %></li>
        <li><%= link_to "All", work_orders_path(params.merge({:status_filter => "E", :sort_filter => params[:sort_filter]})) %></li>
     </ul>

因此,我希望将链接指向名为viewall的局部文件,而不是我的work_orders_path中的索引。像这样:

<%= link_to render (:partial => 'viewall', :status_filter => "E", :sort_filter => params[:sort_filter]) %>
我需要能够尽可能地传递合并参数。我查看了所有文档,并且昨天整天通过Google搜寻了一整天,但仍然没有找到答案。任何帮助将不胜感激。
1个回答

31

传递变量@foo到局部模板的语法如下:

render :partial => "partial", :locals => { :foo => @foo }
然后在 partial 中可以使用 foo。请参阅该指南的第3.4.4节。 编辑:自 Rails 3.?.? 以来,更简洁的版本如下:
render "partial", foo: @foo

实际上我尝试过了,它根本没有传递变量。 render(:partial => "viewall", :locals => { :status_filter => "H" }) - 我试过带和不带()。也一直在努力使其与link_to一起使用,但未成功。不确定是否可能。 - user1214966
1
请确保在局部文件中将其作为 status_filter 访问,而不是 @status_filterparams[:status_filter] - Thilo
我有一个一般性的问题,只是想确保我做得对。部分视图在加载之前是否会触发控制器?我假设它们会(渲染),但如果不会,我将会遇到问题,因为我的控制器使用这些参数根据日期范围和状态从我的工单表中选择行。我的意图是根据工单所处的状态,在不同的选项卡中显示工单。 - user1214966
控制器渲染视图,而视图又可以包含局部视图。我链接的指南是一个很好的介绍,说明它们是如何相互关联的。 - Thilo
2
也可以这样写:render "partial", {:foo => @foo} - tokland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接