Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 关于每页活动流/日志的一些数据库设计思想_Ruby On Rails_Facebook_Database Design_Feed_Audit - Fatal编程技术网

Ruby on rails 关于每页活动流/日志的一些数据库设计思想

Ruby on rails 关于每页活动流/日志的一些数据库设计思想,ruby-on-rails,facebook,database-design,feed,audit,Ruby On Rails,Facebook,Database Design,Feed,Audit,我正在建立用户操作的活动日志。但主要目标是获得所有活动,而不是每个用户,而是每个页面范围。以后我会再解释 我关心并提出这个问题的主要问题是避免使用连接来执行此操作,并在可伸缩性方面走上正确的道路 众所周知的活动日志设计方法: 因此,要获取所有用户活动,需要获取列user_id=?。嗯 嗯。现在假设我的应用程序有很多关于名人的页面。用户可以将主题、主题内的问题添加到页面中。还可以更改页面的名称、照片等 一个假设的页面示例 那么,这些活动只有在按/stevejobs页面分组时才相关,因为它们需要显示

我正在建立用户操作的活动日志。但主要目标是获得所有活动,而不是每个用户,而是每个页面范围。以后我会再解释

我关心并提出这个问题的主要问题是避免使用连接来执行此操作,并在可伸缩性方面走上正确的道路

众所周知的活动日志设计方法:

因此,要获取所有用户活动,需要获取列user_id=?。嗯

嗯。现在假设我的应用程序有很多关于名人的页面。用户可以将主题、主题内的问题添加到页面中。还可以更改页面的名称、照片等

一个假设的页面示例

那么,这些活动只有在按/stevejobs页面分组时才相关,因为它们需要显示在页面内:

页码:Stevejobs

行动:

用户1添加一个问题:史蒂夫·乔布斯是什么时候出生的?关于话题 用户2将页面名称编辑为Steve Jobs 用户1添加了一个主题生命 到目前为止,每个活动都有与活动和父对象相关的对象。例如:

When add question: {object_type: Question, object_id: 1, parent_type: Topic, parent_id: 1}

When add topic: {object_type: Topic, object_id: 1, parent_type: Page, parent_id: 1}
然后,如果我想获取/jobs中发生的所有活动,则列父级可以有很多深度,直到要加入的页面id

一种解决方案是添加两个名为scope\u type和scope\u id的额外多态列

When add question: {object_type: Question, object_id: 1, parent_type: Topic, parent_id: 1, scope_type: Page, scope_id: 1}

When add topic: {object_type: Topic, object_id: 1, parent_type: Page, parent_id: 1, scope_type: Page, scope_id: 1}
因此,我认为,可以更轻松地获得每页的所有活动

我该怎么办

我正在做的连接


然后结成联盟。太难看了。最后,序列化的列也避免了连接是无用的

您的第二个解决方案似乎满足了您的需要。怎么了?此外,是否需要存储scope_类型?那将永远是第页,对吗?谢谢。我不知道到底出了什么问题。它似乎有太多的专栏,我没有看到有人这样做。我只是想了解一些想法。你的模特看起来怎么样?他们之间有什么联系?我本来打算回答的,但我想最好先知道这一点。请将相关关联添加到您的问题中。@GorrillaMcD好吧,我的模型很正常……在这个例子中,一个页面有很多主题,一个主题有很多问题。您使用的rails版本是什么。Rails3或Rails2?第二个解决方案似乎可以满足您的需要。怎么了?此外,是否需要存储scope_类型?那将永远是第页,对吗?谢谢。我不知道到底出了什么问题。它似乎有太多的专栏,我没有看到有人这样做。我只是想了解一些想法。你的模特看起来怎么样?他们之间有什么联系?我本来打算回答的,但我想最好先知道这一点。请将相关关联添加到您的问题中。@GorrillaMcD好吧,我的模型很正常……在这个例子中,一个页面有很多主题,一个主题有很多问题。您使用的rails版本是什么。铁路3号还是2号?
# All activities from Topics of page
list_activities = Activity.joins("JOIN lists ON activities.item_id = topics.id and activities.item_type = 'Topic'")
                          .joins("JOIN pages ON pages.id = topics.page_id")
                          .where("pages.id = #{self.id}")

# All activities from Question of Topic of Page
document_activities = Activity.joins("JOIN documents ON activities.item_id = questions.id and activities.item_type = 'Question'")
                              .joins("JOIN topics ON topics.id = questions.topic_id")
                              .joins("JOIN pages ON pages.id = topics.page_id")
                              .where("pages.id = #{self.id}")