0

私は 2 つのモデルを持っており、インデックス ビューでユーザーのクレジットを表示しようとしています。

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
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 に答える
1

ビュー内では、'@user' などのインスタンス変数がコントローラーのインスタンス変数に対応します。

インデックス コントローラーと対応するビューには、通常、すべてのユーザーを含む '@users' インスタンス変数があります。実際、多くの場合、インデックス アクションは次のように単純です。

def index
  @users = User.all
end

いずれにせよ、インデックス内に @user 変数を持つことは珍しいことです。そうでないように見えるため、エラーが発生しています。

あなたのインデックス ビューでは、すべてのユーザーを反復処理して、それぞれの未払い額を表示したいと考えているので、次のようにします。

<%= h @users.each {|user| number_to_currency(designer_owed(user), :unit => "$") %>

私は何年もの間 Haml を使用してきたので、私の erb はやや錆びていますが、これでうまくいくと思います。レイアウトのニーズに合わせて変更する必要があります。

ヘルパー メソッドがユーザー引数を受け取るようになりました。

def designer_owed(user)
  Credit.where( :user => user ).sum(:total_received)
end
于 2012-10-03T08:06:57.053 に答える