我有两个模型,我试图在索引视图中显示用户的告知信用。
class User < ActiveRecord::Base
has_many :credits
class Credit < ActiveRecord::Base
belongs_to :user
我试图在index.html.erb视图中显示用户的总积分。我创建了一个帮助方法。
module UsersHelper
def designer_owed
designer_owed = Credit.where( :user_id => @user ).sum(:total_received)
end
我得到的结果有点令人困惑,我知道我做错了但我无法理解。
index.html.erb
<%= h number_to_currency(designer_owed, :unit => "$") %>
我得到零。
但在我的 show.html.erb
上&lt;%= h number_to_currency(designer_owed,:unit =&gt;“$”)%&gt;
我得到了正确的总数。当我使用index.html.erb
查询时,我的sql看起来像这样SELECT SUM("credits"."total_received") AS sum_id FROM "credits" WHERE "credits"."user_id" IS NULL
我想在索引视图中显示这个。
答案 0 :(得分:1)
在视图中,像'@user'这样的实例变量对应于控制器中的实例变量。
在索引控制器和相应的视图中,通常会有一个包含所有用户的“@users”实例变量。实际上,在许多情况下,索引操作可以简单如下:
def index
@users = User.all
end
在任何情况下,在索引中都有一个@user变量是不常见的 - 而且似乎你没有,因此你得到的错误。
在索引视图中,我想你想要遍历所有用户并显示每个用户的欠款,所以:
<%= h @users.each {|user| number_to_currency(designer_owed(user), :unit => "$") %>
我的erb有些生疏,因为我现在已经使用Haml多年了,但我认为这应该有效。您需要更改它以满足您的布局需求。
您的帮助方法现在接受用户参数:
def designer_owed(user)
Credit.where( :user => user ).sum(:total_received)
end
答案 1 :(得分:1)
def index
@users = User.includes(:credits) #fires 2 queries. for users and for credits. use for code optimization
end
在视图中,执行
%table
%thead
%tr
%th User
%th Credits
%tbody
- @users.each do |user|
%tr
%td user.name
%td user.credits.collect(&:total_recieved).sum #doesnt fire extra query cause we have used 'includes'