我有以下要求。
Ex:有一个事务表,其中包含列,例如,transaction_name和amount。我想遍历事务并显示它们的详细信息(transaction_name和amount),最后我想在页面的头部(循环之前)部分显示总量(所有金额的总和)。 (将其视为摘要显示)
示例页面结构就像
所有交易的总和 - 200
交易金额 trn1 100 trn2 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
编辑:
实际上我想要做的是,在特定循环之前显示一些细节,在循环之后可以收集这些细节
Ex:如果我有一个事务对象数组,我想在视图中的事务循环之前显示通过和失败事务的计数
感谢
答案 0 :(得分:3)
在您确实需要重复使用content_for的其他情况下,以下内容可能会有用。
在Rails 4中,您可以pass :flush => true
作为content_for的选项:
<% content_for :example, flush: true do %>
<h1>Deletes previous content</h1>
<% end %>
在Rails 3.1.1(约)中,您可以delete the content from the view_flow when you yield定义和使用以下内容(例如在application_helper中):
def yield_and_flush!(content_key)
view_flow.content.delete(content_key)
end
答案 1 :(得分:2)
我认为你对content_for和yield有错误的想法。 :) http://guides.rubyonrails.org/layouts_and_rendering.html
<h1>
<%= @transactions.collect(&:amount).sum -%>
</h1>
<table>
<%for transaction in @transactions%>
<tr>
<td><%= transaction.transaction_name %></td>
<td><%= transaction.amount %></td>
</tr>
<%end%>
</table>
编辑 -
关于收集数据,我建议你把它们放在辅助方法中:
#transactions_helper.rb
def transactions_total transactions
@transactions_total ||= @transactions.collect(&:amount).sum
end
def passed_transactions transactions
@passed_transactions ||= @transactions.collect{|transaction| transaction.passed == true}
end
def failed_transactions transactions
@failed_transactions ||= transactions - passed_transactions(transactions)
end
刚刚注意到你对theTRON的评论。整个干原理并不适用于执行微型逻辑,例如循环遍历数组。
答案 2 :(得分:0)
我会编写一个帮助方法来单独计算总数,也许还有以下几点:
# app/helpers/transactions_helper.rb
def calculate_total(transactions)
total = 0
transactions.each {|transaction| total += transaction.amount}
total
end
然后,您可以随时随地在视图中显示它:
<%= calculate_total(@transactions) %>
答案 3 :(得分:0)
在Rails 3中,你可以在content_for之后得到;所以你的代码将成为:
<% content_for :transaction_table do %>
<table>
<% total_amount = 0%>
<% for transaction in @transactions do %>
<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 %>
<% end %> <!- End content_for :transaction_table -->
<%= yield :transaction_summary %>
<%= yield :transaction_table %>
注意:
<% content_for :transaction_summary do %>
不必在
之内<% content_for :transaction_table do %>
,但对于一些更复杂的案例,它可以。