0
鑑於以下數據庫模式和Sequel模型,我如何選擇一組節點按其命中相加的一組節點,同時保留結果作爲具有所有數據和工作方法的模型實例?檢索具有統計數據的模型
Sequel.migration{ change{
create_table :nodes do
primary_key :id
String :name
# other columns
end
create_table :node_hits do
foreign_key :node_id, :nodes, null:false
Date :date, null:false
Integer :hits, null:false
primary_key [:node_id,:date]
end
end
class Node < Sequel::Model
one_to_many :node_hits
def is_awesome?
# use data known about the node
end
end
class NodeHit < Sequel::Model
many_to_one :node
end
下面的代碼會出現在「工作」,但未能確實有正常工作所需Node.is_awesome?
方法的特性(由於缺少有關的節點數據):
base = Node.filter(redacted:false)
recent = base.join(:node_hits,node_id: :id).filter{ date>Date.today-7 }
totals = recent.select_more{[ id, sum(hits)as(hits) ]}.group_by(:id)
puts totals.sql
#=> SELECT "id", sum("hits") AS "hits"
#=> FROM "nodes"
#=> INNER JOIN "node_hits" ON ("node_hits"."node_id" = "nodes"."id")
#=> WHERE (("name" != 'phrogz')
#=> AND ("archived" IS FALSE)
#=> AND ("date" > '2012-07-13'))
#=> GROUP BY "id"
totals.all.first.is_awesome?
#=> Error: `name` is nil for the Node instance.
哪有我獲取續集通常爲模型獲取的任何字段?
我的最終需求是根據上週內點擊總數以及該周的點擊次數得到前N個節點,同時允許節點實例功能全面(支持所有已知數據爲一個節點)。
啊,'select_all(:nodes)'是神奇的。謝謝! – Phrogz 2012-07-20 15:59:47