2009-07-23 83 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