[英]ROR Associations group by query
我有以下3個模型及其之間的關系:
class Calendar < ActiveRecord::Base
has_many:fiscalcalendars
has_many:voucherdatas ,:through => :fiscalcalendars
end
class Fiscalcalendar < ActiveRecord::Base
belongs_to :calendar
has_many :voucherdatas
end
class Voucherdata < ActiveRecord::Base
has_many :fiscalcalendars
has_many :calendars, :through => :fiscalcalendars
end
我想要每個月的vhour的總和
我可以通過以下方式將其按財務周分組
Voucherdata.sum(:vhour,:group=>:fiscalyearweek)
有沒有更簡單的方法可以按月獲取?
假設我了解您的數據庫關系,這應該可以滿足您的要求。
Voucherdata.sum(:vhour, :joins => :calendars, :group=> 'calendars.monthname)
但是,如果不作任何修改,該語句將不起作用。 您沒有告訴Rails如何鏈接Voucherdata和Fiscalcalendar。 有兩個:has_many關系,Rails不知道在哪里找到鏈接到另一個的外鍵。
您需要創建一個聯接模型,並使其成為:has_many,:through關系,或者使用:has_and_belongs_to_many關系。 設置完之后,上面的語句無需修改即可工作。
更正了模型關系和所需的遷移。 使用:has_and_belongs_to_many關系(更簡潔的語法):
class Calendar < ActiveRecord::Base
has_many:fiscalcalendars
has_many:voucherdatas ,:through => :fiscalcalendars
end
class Fiscalcalendar < ActiveRecord::Base
belongs_to :calendar
has_and_belongs_to_many :voucherdatas
end
class Voucherdata < ActiveRecord::Base
has_many :calendars, :through => :fiscalcalendars
has_and_belongs_to_many :fiscalcalendars
end
class CreateFiscalcalendarsVoucherdatasJoinTable ActiveRecord::Migration
def self.up
create_table :fiscalcalendars_voucherdatas :id => false do |t|
t.integer :fiscalcalendar_id
t.integer :voucherdata_id
end
end
def self.down
drop_table :fiscalcalendars_voucherdatas
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.