0

私の友人は私がいくつかのクリーンアップを行うのを手伝ってくれました-しかしそれはレールのアクティブな記録的な方法のようには見えません。

最初に私はこのように書いた:

@count_users_approved = current_agent.users.map { |u| u.orders.where("created_at >= ? AND order_status_id = ?", DateTime.now.beginning_of_day, "3")}.count

#レコードを数えるのではなく、結果は次のように表示されていました:[0,0,1]

私の友人はこのように書くことでそれを修正しました:

@count_users_approved = Order.where("created_at >= ? AND user_id IN (?) AND order_status_id = ?", DateTime.now.beginning_of_day, current_agent.users.map(&:id), 2).count

これだけクリーンでActiveRocordタイプを記述できますか?

これが私のモデルの設計方法です。

class Agent < ActiveRecord::Base
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :agent
  has_many :orders
  has_many :support_histories
  has_one :card_info
end

class Order < ActiveRecord::Base
  belongs_to :user
  belongs_to :order_type
  belongs_to :order_status
end
4

1 に答える 1

1

私はこのように行きます:

@count_users_approved = Order.joins(:user).where("orders.created_at >= ?", DateTime.now.beginning_of_day).where(users: {agent_id: current_agent.id}, order_status_id: 2).count

ユーザー テーブルに参加して、ユーザーが現在のエージェントに割り当てられていることをテストします。

また、ID をマップする必要はありません。current_agent.users配列を渡すだけで済みます。Rails は、クエリを作成するときにオブジェクトの ID を抽出します。

于 2012-10-22T12:07:50.823 に答える