我正在构建一个样例站点来熟悉RoR。我一直在阅读“使用Rails进行敏捷Web开发”这本书,现在我正在试验并使用它作为参考,但是我还没有找到问题的答案。
我有两个感兴趣的模型,一个是超市连锁店,另一个是超市。显然,一家连锁超市有一大堆超市。我想要做的是获得一个超市连锁店的基本"show“页面,以显示属于它的超市的列表。
我也不想重复(因为这显然是一件非常糟糕的事情),所以我想我可以使用"render“将超市的index.html.erb插入到supermarket Thing/show.html.erb页面中,如下所示:
<%= render :template => 'supermarkets/index' %>
然而,这在页面上产生了零输出。
我的下一个方法是将其部分化为:
<div id="supermarket-list">
<h1><%= I18n.t "supermarket.title" %></h1>
<table>
<% for s in @supermarkets %>
<tr class="<%= cycle('list-line-odd', 'list-line-even') %>">
<td>
<%= s.supermarketchain.name %>
</td>
<td>
<%= s.address %>
</td>
<td class="list-actions">
<%= link_to I18n.t("general.show"), s%> <br/>
<%= link_to I18n.t("general.edit"), edit_supermarket_path(s) %> <br />
<%= link_to I18n.t("general.delete"), s, :confirm => I18n.t("general.confirmation"), :method => :delete %>
</td>
</tr>
<%end%>
</table>
</div>
然后使用:
<% @supermarkets = Supermarket.all %>
<%= render :partial => 'supermarkets/supermarket' %>
把它放在超市连锁店的展示页面上。
我想知道的是,这是不是一个好的做法。当我想要显示的是超市控制器的"index“操作的确切结果时,初始化一个变量以供partial使用,对我来说似乎很奇怪。评论?
请要求任何必要的澄清。
发布于 2009-12-24 07:03:07
相反,您可以这样做
<%= render :partial => 'supermarket', :collection => Supermarket.all, :as => :s %>
partial将为每个超市调用一次,变量名为s
。
发布于 2010-01-04 13:43:05
在Rails中,渲染来自其他控制器的部分参数是非常好的。通常,如果partial并不真正属于任何一个特定的控制器,那么它就被放在app/views/shared
中。在这种情况下,尽管我认为将部分保留在超市控制器中是有意义的。
下面是如何对这两个部分使用相同的部分supermarkets/_supermarket.html.erb
。partial将使局部变量supermarket
可用。
# supermarketchain/show.html.erb
<%= render :partial => "supermarkets/supermarket", :collection => @supermarketchain.supermarkets %>
# supermarkets/show.html.erb
<%= render :partial => "supermarket", :object => @supermarket %>
发布于 2009-12-24 07:46:28
我自己也在努力解决这个问题,但发现它并不是一种真正支持的渲染部分参数的方法,而且由于我通常信任Rails开发人员的约定,所以我认为这可能不是一个好主意。
我不认为在其中使用模板会起作用,你可以使用render_to_string
,但这看起来有点老土,可能会在未来给你带来更多的麻烦。
此外,如果要呈现集合,最好的方法是在控制器操作中设置实例变量,而不是在视图中。
def index
@supermarkets = Supermarket.all
end
然后在视图index.html.erb
中,调用:
<%= render @supermarkets %>
然后,它将遍历数组的每个成员,并为每个成员呈现views/supermarkets/_supermarket.html.erb
,其中“超市”是部分中当前可用的成员。
<%= supermarket.name %><br />
<%= supermarket.address %>
我担心很多渲染的性能,但只要关注日志和时间,我认为渲染的时间与在原始视图中手动渲染的时间大致相同。
https://stackoverflow.com/questions/1955807
复制相似问题