2016-11-17 60 views
1

如果有人能幫我寫一個範圍,顯示參加活動的女性人數(女性),我將非常感激。協會的範圍 - Rails 4

模型

user.rb

belongs_to :category_gender 
has_many :payments 

category_gender.rb

has_many :users 

event.rb

belongs_to :user 
has_many :payments 

payment.rb

belongs_to :user 
belongs_to :event 

終端

event = Event.find(7) 
event_payments = event.payments 

2.3.0 :054 > event_payments 
[ 
    [0] #<Payment:0x007fea72ac5b70> { 
           :id => 6, 
          :email => "[email protected]", 
          :user_id => 4, 
         :reference => "SPz_ruZ5om", 
         :created_at => Wed, 16 Nov 2016 13:52:23 UTC +00:00, 
         :updated_at => Wed, 16 Nov 2016 13:52:23 UTC +00:00, 
         :event_id => 7, 
       :stripe_customer_id => "cus_9YuZZAniFCZVxn", 
       :stripe_payment_id => "ch_19GTpnAAe71J3vK0aj1gKryO", 
       :event_payment_date => Wed, 16 Nov 2016 13:52:23 UTC +00:00, 
          :status => "success" 
    } 
    [1] #<Payment:0x007fea72ac5b70> { 
           :id => 7, 
          :email => "[email protected]", 
          :user_id => 5, 
         :reference => "SPz_mnX4ul", 
         :created_at => Wed, 16 Nov 2016 13:52:23 UTC +00:00, 
         :updated_at => Wed, 16 Nov 2016 13:52:23 UTC +00:00, 
         :event_id => 7, 
       :stripe_customer_id => "cus_6FhLLMotYCCYvn", 
       :stripe_payment_id => "ch_20GTunDDt87J3vK1sp4gPry9", 
       :event_payment_date => Wed, 16 Nov 2016 13:52:23 UTC +00:00, 
          :status => "success" 
    } 
] 

我如何寫一個範圍,找到女性的事件下所取得的所有款項?

如果我寫了下面我可以找到一名女子的首付款:

event.payments.first.user.category_gender.name 

2.3.0 :026 > event.payments.first.user.category_gender.name 
    Payment Load (0.2ms) SELECT "payments".* FROM "payments" WHERE "payments"."event_id" = ? ORDER BY "payments"."id" ASC LIMIT 1 [["event_id", 7]] 
    User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 4]] 
    CategoryGender Load (0.1ms) SELECT "category_genders".* FROM "category_genders" WHERE "category_genders"."id" = ? LIMIT 1 [["id", 2]] 
=> "Female" 

我嘗試了以下範圍顯示由女性的事件做出的所有款項,但沒有運氣 - 嘗試了方法,但沒有運氣。您的幫助和解釋,將不勝感激對誰寫的這是一個範圍和方法:

event.rb

scope :females, -> { joins(payment: :category_gender).where('category_genders.name' => "Female") } 

def females 
    self.payments.where('user.category_gender.name = ?', "Female") 
end 

錯誤消息:

2.3.0 :004 > event.females 
    Payment Load (1.7ms) SELECT "payments".* FROM "payments" WHERE "payments"."event_id" = ? AND (user.category_gender.name = 'Female') [["event_id", 7]] 
SQLite3::SQLException: no such column: user.category_gender.name: SELECT "payments".* FROM "payments" WHERE "payments"."event_id" = ? AND (user.category_gender.name = 'Female') 
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: user.category_gender.name: SELECT "payments".* FROM "payments" WHERE "payments"."event_id" = ? AND (user.category_gender.name = 'Female') 

回答

3
class Payment 
    scope :by_females, -> { joins(user: :category_gender).where(category_genders: { name: 'Female' }) } 
end 

現在簡單易用:

event.payments.by_females 
+0

at andrey謝謝你soo !!完美作品 – ARTLoe

+0

@ARTLoe歡迎:) –