假设我有一个名为User的模型。如何将虚拟属性添加到生成的查询的最终结果中?
class User < ActiveRecord::Base
ATTRIBUTES = %w[name email balance]
scope :main_selection, -> { select('name,email,total_bought, total_deposit') }
def balance
(total_deposit - total_bought).round
end
end
在我的控制器里面我有
@user = User.main_selection
@attributes = User::ATTRIBUTES
在视图中我想在表格中显示它
<table>
<thead>
<tr>
<% @attributes.each do |a| %>
<th><%= a %><th>
<% end %>
</tr>
</thead>
<tbody>
<% @user.each do |u| %>
<tr>
<% @attributes.each do |a| %>
<td><%= u[a] %><td>
<% end %>
</tr>
<% end %>
</tbody>
<table>
唯一的问题是我需要在生成的结果中添加balance属性,以便 u [a] 的循环可以正常工作。
我需要提一下,@ user.first.balance可以调用余额,但是循环内部不起作用,而是显示nil值。
答案 0 :(得分:1)
尝试使用u.send(a)
代替u[a]
u [a]仅适用于属性。在您的示例中,balance不是属性,它是一种方法。