TL (레일 액티브 더 나은 방법을 찾고), DR :합계 created_at과 updated_at의 차이
를 그래서 나는 내가 할 그림 : 이제
@user.resources.each do |r|
#Something like this...
r.views.sum(:created_at, :group=>:resource_id) - r.views.sum(:updated_at, :group=>:resource_id)
end
, 나는 그것을 얻을 수있어
r = Resource.first
time_sum_difference = r.views.sum {|v| v.updated_at.to_i - v.created_at.to_i}
하지만 오히려 액티브 나를
편집을 위해 그것을 계산 거라고 :이처럼 작동 쓰레기, 수 없습니다 스와 m 타임 스탬프 분명히, 자리에 차이를 계산해야합니다
더 좋은 방법이 있나요? 나는 올바른 길을 가고 있는가?
가 나는이 자원과 사용자 사이에 테이블을 조인 뷰 모델이 있습니다
세부 사항을 (내가 실험을하고 나는 그것을 알아낼 때까지이 게시물을 업데이트됩니다).
이것은 표준 타임 스탬프가 있습니다 created_at 및
updated_at 나는 사용자가 제출 자원에 소요되는 시간의 합을 가져올. 보기에 그런
has_many :views, :class_name => 'UserResourceView'
:
class UserResourceView < ActiveRecord::Base
attr_accessible :resource_id, :user_id
belongs_to :resource
belongs_to :user
end
을 그리고 사용자 :
class User < ActiveRecord::Base
has_many :resources
has_many :resource_views, :class_name => 'UserResourceView'
has_many :viewed_resources, :through => :resource_views, :source => :resource
...
end
UPDATE :
u.resources.joins(:views).group('resources.id').select('sum(views.created_at) as s_ca, sum(views.updated_at) as s_ua, s_ca - s_ua as diff').first
Resource Load (0.7ms) SELECT sum(views.created_at) as s_ca, sum(views.updated_at) as s_ua, s_ca - s_ua as diff FROM "resources" INNER JOIN "user_resource_views" ON "user_resource_views"."resource_id" = "resources"."id" WHERE "resources"."user_id" = 1 GROUP BY resources.id LIMIT 1
ActiveRecord::StatementInvalid: PG::Error: ERROR: missing FROM-clause entry for table "views"
LINE 1: SELECT sum(views.created_at) as s_ca, sum(views.updated_at)...
^
: SELECT sum(views.created_at) as s_ca, sum(views.updated_at) as s_ua, s_ca - s_ua as diff FROM "resources" INNER JOIN "user_resource_views" ON "user_resource_views"."resource_id" = "resources"."id" WHERE "resources"."user_id" = 1 GROUP BY resources.id LIMIT 1
내 자원 모델에서
업데이트 2 :
u.resources.joins(:user_resource_views).group('resources.id').select('sum(user_resource_views.created_at) as s_ca, sum(user_resource_views.updated_at) as s_ua, s_ca - s_ua as diff')
ActiveRecord::ConfigurationError: Association named 'user_resource_views' was not found; perhaps you misspelled it?
UPDATE 3 (자세한 정보) : 내 schema.rb 파일에서
:
create_table "user_resource_views", :force => true do |t|
t.integer "resource_id"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
어떤 데이터베이스를 사용하고 있습니까? –
우리는 포스트그레스를 실행 중입니다 –