我们开发的时候遇到一种情况,业务量小的时候设计了一张表来存帖子:
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
分享到:
相关推荐
10. **会话(Sessions)**和**cookies**:Rails提供了内置的会话管理和cookie支持,用于跟踪用户状态和实现用户认证。 11. **测试(Testing)**:Rails鼓励TDD(Test-Driven Development),提供了丰富的测试工具,...
Rails的 erb(Embedded Ruby)模板引擎允许开发者在HTML中嵌入Ruby代码,实现动态内容生成。 **控制器(Controller)** 是模型和视图之间的桥梁,处理用户的请求,调用模型进行业务处理,并将数据传递给视图进行...
在描述中提到的"Knock"是一个专门为Rails API设计的库,它帮助开发者实现JSON Web Token(JWT)的身份验证,这是一种安全的身份验证机制,适用于无状态API。 JWT是一种轻量级的认证协议,它允许服务器向客户端发送...
Ruby on Rails框架实现的无线点餐系统项目是一个基于无线网络技术,专为餐饮行业设计的综合性信息化解决方案。此系统利用Ruby on Rails全栈式MVC框架,结合当下先进的移动互联网技术,旨在提升餐厅运营效率、优化...
基于ruby on rails框架实现的音乐推荐网站项目源码.zip基于ruby on rails框架实现的音乐推荐网站项目源码.zip基于ruby on rails框架实现的音乐推荐网站项目源码.zip基于ruby on rails框架实现的音乐推荐网站项目源码...
在Rails中使用SSL(安全套接层)是构建Web应用时确保数据传输安全的重要步骤。...通过理解并应用这些知识点,开发者可以在Rails应用中实现安全的SSL连接,提升用户数据的安全性,符合现代Web应用的安全标准。
标题 "在Rails中使用RSpec生产CHM文档" 暗示了这个话题是关于如何在Ruby on Rails(简称Rails)框架中使用RSpec测试工具来创建帮助文档,特别是以CHM(Microsoft Compiled HTML Help)格式。CHM文件是一种常见的...
2. **Ruby编写**: 作为纯Ruby实现的服务器,Mongrel与Rails框架集成紧密,减少了中间层带来的额外复杂性。 3. **轻量级**: Mongrel体积小巧,启动快速,适合开发和测试环境。 ** 安装Mongrel ** 在Rails项目中安装...
- 如何在Rails中实现RESTful接口。 - **案例分析**: - 分析一个典型的RESTful应用示例。 #### 九、练习作业2-在Group里面发表文章-双层RESTFul - **目标**: - 在Group中添加Post功能。 - **实现过程**: - 创建...
1. **ActiveRecord**:这是Rails框架中的ORM(Object-Relational Mapping)组件,它负责处理数据库操作。通过ActiveRecord,开发者可以使用面向对象的方式来操作数据,而无需编写SQL语句。 2. **ActionController**...
1. **日期格式匹配**:确保WebCalendar.js的日期格式与Rails应用中约定的日期格式一致。Rails默认使用ISO 8601标准(YYYY-MM-DD),而WebCalendar.js可能有不同的默认设置,需要进行相应的配置。 2. **数据验证**:...
总结来说,Struts2和Rails的国际化实现都是基于资源文件,并通过特定的API或辅助方法在代码中引用这些资源。它们都考虑了会话和请求的上下文来自动选择合适的语言,并提供了手动切换语言的能力。尽管实现方式有所...
安装过程中,遵循提示进行,确保选择自定义安装并勾选Rails相关的插件,以便在Aptana中获得对Rails的全面支持。 安装完成后,打开Aptana Studio,创建一个新的Rails项目。在“File”菜单中选择“New”然后点击...
这篇关于“rails学习中分页的示例”的文章可能涵盖了如何在Rails应用中实现分页的详细步骤。 在Rails中,最常用的分页库是`Kaminari`和`WillPaginate`。这里我们将以`Kaminari`为例进行讲解,因为它是近年来更受...
Rails的 erb(嵌入式Ruby)模板允许开发者在HTML中插入Ruby代码,实现动态内容的渲染。 3. **控制器(Controller)**:控制器是模型和视图之间的桥梁,处理用户请求,调用模型方法,然后将结果传递给视图进行展示。...
作者特别提到了“CRUD懶人大法Scaffold”,它是一种通过Rails自动生成代码的方式来快速搭建基本的CRUD操作,这大大简化了开发流程,使得开发者可以将更多的精力放在业务逻辑的实现上。 此外,书中还介绍了一些Rails...
标题中的“Rails的中文乱码问题”涉及到的是在使用Ruby on Rails框架开发Web应用时,遇到的中文字符编码不正确的问题。Rails是一个基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式。在...
4. **ActiveRecord**:这是Rails中的ORM(对象关系映射)库,它允许开发者用Ruby代码操作数据库,无需编写SQL。 5. **Scaffolding**:Rails的快速开发工具,能自动生成CRUD(创建、读取、更新、删除)操作的模型、...