簡體   English   中英

ROR關聯按查詢分組

[英]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
  • 日歷中的字段:id,monthname
  • 財政日歷中的字段:id,calendar_id,會計年度周
  • voucherdata中的字段:id,vhour,會計年度周

我想要每個月的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM