0

我有两个模型,我试图在索引视图上显示用户的告知信用。

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

<%= h number_to_currency(designer_owed, :unit => "$") %>

我得到了正确的总数。当我使用 index.html.erb 查询时,我的 sql 看起来像这样

SELECT SUM("credits"."total_received") AS sum_id FROM "credits" WHERE "credits"."user_id" IS NULL

我想在索引视图上显示这个。

4

2 回答 2

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
于 2012-10-03T08:06:57.053 回答
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'

结帐http://guides.rubyonrails.org/active_record_querying.html

于 2012-10-03T08:17:16.237 回答