Rails 产量 - content_for 问题
我有以下要求。
例如:有一个交易表,其中包含交易名称和金额列。我想循环遍历交易并显示其详细信息(交易名称和金额),最后我想在页面的头部(循环之前)部分显示总金额(所有金额的总和)。 (将其视为摘要显示)
示例页面结构类似于
所有交易的总和 - 200
交易金额 特恩1 100 特恩2 50 trn3 50
我尝试使用 Yield 和 content_for 标签,但没有成功。
我的代码如下(我在我的 erb 文件中调用。)
<%= yield :transaction_summary %>
<table>
<% total_amount = 0%>
<%for transaction in @transactions%>
<tr>
<td><%= transaction.transaction_name %></td>
<td><%= transaction.amount %></td>
<% total_amount += transaction.amount %>
</tr>
<%end%>
</table>
<% content_for :transaction_summary do %>
<h1>
Sum of all the transactions - <%= total_amount %>
</h1>
<% end %>
并且
我在视图内使用(不在布局内)
我正在使用 Rails 2.2.2
请帮助我让我知道是否有更好的方法,
提前感谢欢呼
Sameera
编辑
:
实际上我想做的是,在特定循环之前显示一些详细信息,可以在循环之后收集这些详细信息
例如:如果我有一个交易对象数组,我想在交易循环之前显示通过和失败交易的计数,
谢谢
I have the following requirement.
Ex: There is a transaction table where it has columns say, transaction_name and amount. I want to loop through the transactions and display their details (transaction_name and amount) and finally I want to display the total amount (sum of all the amounts) in the head (before the loop) section of my page. (Think about it as a summary display)
Example page structure would be like
Sum of all the transactions - 200
transaction amount
trn1 100
trn2 50
trn3 50
And I tried to use yield and content_for tag but no luck.
my code is as follows (i'm calling inside my erb file.)
<%= yield :transaction_summary %>
<table>
<% total_amount = 0%>
<%for transaction in @transactions%>
<tr>
<td><%= transaction.transaction_name %></td>
<td><%= transaction.amount %></td>
<% total_amount += transaction.amount %>
</tr>
<%end%>
</table>
<% content_for :transaction_summary do %>
<h1>
Sum of all the transactions - <%= total_amount %>
</h1>
<% end %>
And
I'm using with inside a view (not inside a layout)
I'm using rails 2.2.2
Please help me and let me know if there is a better way
thanks in advance
cheers
sameera
EDIT:
Actually what I want to do is , Display some details before a particular loop where those details can be collected after the loop
Ex: If i have an array of transaction objects, I want to show a count of pass and failed transactions before the transactions loop in my view
thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在其他情况下,您确实需要重用 content_for,以下内容可能会很有用。
在 Rails 4 中,您可以 传递
:同花=> true
作为 content_for 的选项:在 Rails 3.1.1(大约)中,您可以 通过定义和使用以下内容(例如在 application_helper 中),在屈服时从 view_flow 中删除内容:
In other cases where you really need to reuse content_for, the following may be useful.
In Rails 4, you can pass
:flush => true
as an option to content_for:In Rails 3.1.1 (approx) you can delete the content from the view_flow when you yield by defining and using the following (eg in application_helper):
我认为您对 content_for 和产量有错误的想法。 :) http://guides.rubyonrails.org/layouts_and_rendering.html
编辑 -
关于收集数据,我建议你将它们放入辅助方法中:
刚刚注意到你对 theTRON 的评论。整个干燥原则并不真正适用于执行微小的逻辑,例如循环数组。
I think you have the wrong idea about content_for and yield. :) http://guides.rubyonrails.org/layouts_and_rendering.html
edit -
Regarding collecting data, I suggest you put them in helper methods:
Just noticed your comment to theTRON. The whole dry principle doesn't really apply to executing tiny logic such as looping through a array.
我会编写一个单独计算总数的辅助方法,也许类似于:
然后您可以将其显示在视图中的任意位置,方法是:
I would write a helper method which calculates the total separately, perhaps something along the lines of:
Then you can display it in your view wherever you like, with:
在 Rails 3 中,您可以在 content_for; 之后产生yield所以你的代码将变成:
注意:
不必位于 的内部
,但对于一些更复杂的情况它可以。
In Rails 3 you can yield after content_for; so your code will become:
Note:
doesn't have to be inside of
, but for some more complex cases it could.