2014-03-11 5 views
1

Допустим, у меня есть модель с именем User. Как добавить виртуальные атрибуты к окончательному результату сгенерированного запроса?Как добавить атрибуты к результату активной записи в Rails 4?

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> 

Единственная проблема заключается в том, что мне нужно, чтобы добавить баланс атрибут в сгенерированный результат, так что цикл с u [a] может работать.

Следует отметить, что баланс можно вызывать с помощью @ user.first.balance, но внутри цикла не работает, и вместо него отображается значение nil.

ответ

1

Попробуйте u.send(a) вместо u[a]

и [а] будет работать только по атрибутам. В вашем примере баланс не является атрибутом, это метод.

+0

Спасибо, сейчас работает. Но есть ли другой способ добавить баланс в атрибуты результата? –

Смежные вопросы