Rails经常犯的错误二 - :include自定义的子集合
来源:互联网 发布:漫画软件推荐知乎 编辑:程序博客网 时间:2024/06/05 00:00
一.创建两个表:
CREATE TABLE category (
id INT NOT NULL AUTO_INCREMENT,
category_name VARCHAR(255) NOT NULL,
PRIMARY KEY(id)
)
CREATE TABLE grp (
id INT NOT NULL AUTO_INCREMENT,
category_id INT NOT NULL,
grp_name VARCHAR(255) NOT NULL,
PRIMARY KEY(id),
INDEX idx_grp_category_id(category_id)
)
二.定义关系:
class Category < ActiveRecord::Base
has_many :grp
has_many :i_grp, :class_name => 'Grp', :limit=>5
end
class Grp < ActiveRecord::Base
belongs_to :category
end
定义i_grp的是为了满足需求取每个category下的grp,最多5个
三.做测试,定义fixtures(category为1的grp共有6个):
- category.yml
one:
id: 1
category_name: a
two:
id: 2
category_name: b
- grp.yml
one:
id: 1
category_id: 1
grp_name: a
two:
id: 2
category_id: 1
grp_name: b
three:
id: 3
category_id: 1
grp_name: c
four:
id: 4
category_id: 1
grp_name: d
five:
id: 5
category_id: 1
grp_name: e
six:
id: 6
category_id: 1
grp_name: f
四.写测试类
category_test.rb
class CategoryTest < Test::Unit::TestCase
fixtures :category,:grp
def test1
category = Category.find(1)
p 'no include category.i_grp.size = ' + category.i_grp.size.to_s
category2 = Category.find(1,:include=>'i_grp')
p 'has include category.i_grp.size = ' + category2.i_grp.size.to_s
end
end
打印出来的结果如下:
"no include category.i_grp.size = 5" --》期望的结果
"has include category.i_grp.size = 6" --》非预期的结果
为什么会出现这种情况,去看看日志test.log
Nov 06 10:35:20 13cc97e4810e43f rails[3044]: [4;35;1mCategory Load (0.016000)[0m [0mSELECT * FROM category WHERE (category.`id` = 1) [0m
Nov 06 10:35:20 13cc97e4810e43f rails[3044]: [4;36;1mGrp Columns (0.000000)[0m [0;1mSHOW FIELDS FROM grp[0m
Nov 06 10:35:20 13cc97e4810e43f rails[3044]: [4;35;1mSQL (0.000000)[0m [0mSELECT count(*) AS count_all FROM grp WHERE (grp.category_id = 1) [0m
Nov 06 10:35:20 13cc97e4810e43f rails[3044]: [4;36;1mCategory Load Including Associations (0.000000)[0m [0;1mSELECT category.`id` AS t0_r0, category.`category_name` AS t0_r1, grp.`id` AS t1_r0, grp.`category_id` AS t1_r1, grp.`grp_name` AS t1_r2 FROM category LEFT OUTER JOIN grp ON grp.category_id = category.id WHERE (category.`id` = 1) [0m
用了include语句后 model中定义的:limit=>5会失效.
实际上你会发现,不仅:limit会失效,如果加入其他参数如 :order, :offset等都会失效
欢迎大家来这里坐坐, RubyOnRails话吧
( http://www.3user.com/topic/show/12462 )
- Rails经常犯的错误二 - :include自定义的子集合
- Rails经常犯的错误一 - find(:first)
- 指针经常容易犯的错误
- android经常会犯的错误
- 经常会犯的一些低级错误!
- 总结下java经常犯的错误
- 程序员经常犯的五大错误
- css中经常犯的错误
- c语言中经常犯的错误
- 子集合的构造
- 子集构造 集合的子集合
- 开发人员经常犯的8个设计错误
- 开发人员经常犯的8个设计错误
- 远程注入线程中一些经常犯的错误
- 经常犯的低级错误也要引起重视
- PHP程序员经常犯的10种错误
- 人在辩论中经常犯的愚蠢错误
- C# 开发者最经常犯的 8 个错误
- EJB 倡导者: 使用 Java EE 实现松耦合的 SOA 应用程序
- Nokia 手机开发官方资料索引
- Hibernate中find()方法问题??这是为什么?
- Oracle端口映射
- Rails经常犯的错误一 - find(:first)
- Rails经常犯的错误二 - :include自定义的子集合
- [转]3User——社区化论坛的新方向
- 改变vs2005中代码字体的大小和颜色
- 在as和js里都可以使用的小方法整理
- ajax返回javascript给页面执行
- C++与C语言细节差异分析
- mysql不能显示中文
- Javascript之Eval函数解析(转贴)
- 教育网网络电视超强集合