如何在Rails 4中为活动记录结果添加属性?

时间:2014-03-11 22:31:02

标签: ruby-on-rails ruby activerecord orm

假设我有一个名为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值。

1 个答案:

答案 0 :(得分:1)

尝试使用u.send(a)代替u[a]

u [a]仅适用于属性。在您的示例中,balance不是属性,它是一种方法。