2009-07-23 121 views
0

組我有以下3個模型和關係之間:在日曆ROR協會通過查詢

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在fiscalcalendar
  • 字段:ID,CALENDAR_ID,fiscalyearweek
  • voucherdata中的字段:id,vhour,fiscalyear周

我想要每個月的vhour總和

我可以通過財政星期做

Voucherdata.sum(:vhour,:group=>:fiscalyearweek) 

有沒有更簡單的方式,通過每月能拿到它去組?

回答

1

這應該做你所要求的,假設我理解你的數據庫關係。

Voucherdata.sum(:vhour, :joins => :calendars, :group=> 'calendars.monthname) 

但是,如果沒有一點修改,此聲明將無法正常工作。您不會告訴Rails如何鏈接Voucherdata和Fiscalcalendar。 With two: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 
+0

查詢下面生成;請注意,因爲它沒有fiscalcalenar.voucherdat_id列因此它不會wrk .. thx爲您的時間 SELECT sum(vhour)AS sum_vhour,calendars.name AS calendars_name FROM`voucherdatas` INNER JOIN`fiscalcalendars` ON(`voucherdatas` (``calendars`.`id` =`fiscalcalendars`.`calendar_id`)GROUP BY calendars.name – philipth 2009-10-09 13:37:49