我们开发的时候遇到一种情况,业务量小的时候设计了一张表来存帖子:
posts(id, topic_id, content, status, created_at, updated_at)
当数据量达到百万的量级后,发现此表查找非常慢,这时候想从数据库的角度来改进。
比较常用的方法是,把posts表中的大块数据的字段拆分出来,作为一个子表:
posts(id, topic_id, status, created_at, updated_at)
post_contents(post_id, content)
为了保证其他层不做修改,我们用代理的办法。
class Post < ActiveRcord::Base
has_one :post_content, :class_name=>'PostContent',:foreign_key=>'post_id'
def content
post_content ? post_content.content : nil
end
def content=(txt)
if post_content
post_content.content = txt
else
build_post_content(:content=>txt) unless txt.blank?
end
end
end
针对这个应用,我们自己搞了个通用方法加入ActiveRecord::Base
def self.forward_with_create(obj_name,attr_names)
attr_names.each do |attr_name|
define_method(attr_name) do |*args|
obj = send(obj_name)
obj ? obj.send(attr_name) : nil
end
define_method("#{attr_name}=") do |*args|
obj = send(obj_name)
val = args[0]
if obj
if obj.send(attr_name) != val
obj.send("#{attr_name}=",val)
end
else
send("build_#{obj_name}",{attr_name=>val}) if !val.blank?
end
end
end
end
这样,我们的Post就变成:
class Post < ActiveRcord::Base
has_one :post_content, :class_name=>'PostContent',:foreign_key=>'post_id'
forward_with_create(:post_content,[:content])
end
分享到:
相关推荐
[Pragmatic Bookshelf] 敏捷网络应用开发 (Rails 4 实现) (英文版) [Pragmatic Bookshelf] Agile Web Development with Rails 4 (E-Book) ☆ 图书概要:☆ Rails just keeps on changing. Both Rails 3 and 4, as...
Ruby on Rails中文指南
Knock - 为Rails API实现无缝JWT身份验证
基于ruby on rails框架实现的音乐推荐网站项目源码.zip基于ruby on rails框架实现的音乐推荐网站项目源码.zip基于ruby on rails框架实现的音乐推荐网站项目源码.zip基于ruby on rails框架实现的音乐推荐网站项目源码...
Ruby On Rails中文教材(PDF)
入门rails的第一个demo
字体配制文件 博文链接:https://babo.iteye.com/blog/72298
shoppe-example, 在 Rails 中使用Shoppe平台的示例存储实现 这是一个 Rails 应用程序,它使用 Shoppe 构建。 它具有一个可以爱的设计,以充分演示Shoppe平台提供的功能以及它在 Rails 应用程序中的。 正在启动要开始...
敏捷Rails中文教程 敏捷Rails中文教程 敏捷Rails中文教程
Google Sign-In for Rails 实现将Google登录集成到您的Rails应用中
rails指南 中文版
rails-assets, 在 Rails 中,资产管理的解决 Rails 资产 Bundler 到 Bower 代理本自述文件涉及项目的开发方面。 访问站点了解如何在你的应用程序中使用 Rails 资产。 插件开发设置git clone git@github.com:tenex/r
使用Aptana+Rails开发Rails Web应用 有Aptana的安装配置等等,中文
rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...
《Rails之道》详细讨论了Rails的程序代码并通过分析Rails中的代码片段来深入解释它的功能,同时,《Rails之道》部分章节也摘录了一些API文档中的内容,使读者能够快速地找到对应的API文档、相关的示例代码以及深入...
在过去的几年中,《Ruby on Rails Tutorial》这本书被视为介绍使用 Rails 进行 Web 开发的先驱者。 在这个全球互联的世界中,计算机编程和 Web 应用程序开发都在迅猛发展,我很期待能为中国的开发者提供 Ruby on ...
rails_email_preview, 在 Rails 中,预览和编辑应用程序邮件程序模板 Rails 电子邮件预览 使用这里 Rails 引擎在浏览器中预览电子邮件。 兼容 Rails 4.2 。电子邮件审阅: 所有电子邮件预览的列表: 代表有两个主题...