- 浏览: 2075756 次
- 性别:
- 来自: NYC
文章分类
- 全部博客 (628)
- Linux (53)
- RubyOnRails (294)
- HTML (8)
- 手册指南 (5)
- Mysql (14)
- PHP (3)
- Rails 汇总 (13)
- 读书 (22)
- plugin 插件介绍与应用 (12)
- Flex (2)
- Ruby技巧 (7)
- Gem包介绍 (1)
- javascript Jquery ext prototype (21)
- IT生活 (6)
- 小工具 (4)
- PHP 部署 drupal (1)
- javascript Jquery sort plugin 插件 (2)
- iphone siri ios (1)
- Ruby On Rails (106)
- 编程概念 (1)
- Unit Test (4)
- Ruby 1.9 (24)
- rake (1)
- Postgresql (6)
- ruby (5)
- respond_to? (1)
- method_missing (1)
- git (8)
- Rspec (1)
- ios (1)
- jquery (1)
- Sinatra (1)
最新评论
-
dadadada2x:
user模型里加上 protected def email ...
流行的权限管理 gem devise的定制 -
Sev7en_jun:
shrekting 写道var pattern = /^(0| ...
强悍的ip格式 正则表达式验证 -
jiasanshou:
好文章!!!
RPM包rpmbuild SPEC文件深度说明 -
寻得乐中乐:
link_to其实就是个a标签,使用css控制,添加一个参数: ...
Rails在link_to中加参数 -
aiafei0001:
完全看不懂,不知所然.能表达清楚一点?
"$ is not defined" 的问题怎么办
在问答里看到关于嵌套使用find include的问题,小结一下
在Rails的API里,find方法有如下参数,conditions order group having limit offset joins include select from readonly lock
其中,对于include的解释是说,include选项后的参数,应该是一个已经关联的表。该表信息会在检索后,和检索表信息一起加载。给的例子如下:
include选项的好处就不举例说了,其实,就和你用游标做全检索,还是join出一个view一个道理。
现在说下面一个情况,有学生表和班级表如下:
很显然,当我们要输出所有学生的班级信息时,我们会用include如下:
然而,当我们的要求增加,有一个新的表学校信息也希望检索出来时,那么,表结构如下:
那当我们想要输出所有学生的学校相关信息时,那么,也许我们会想到使用检索语句
实际上,运行结果是,我们会得到一个':university' is not a valid association of the Student model的错误提示。
这个错误提示,是可以理解的。正如,文章开始的Rails API里所说的include后面的参数应该是一个已经和检索表有关联的表。实际上University和Student表没有直接关联。这时的惯性思维是使用find_by_sql,诚然,的确可以解决。其实,应该嵌套include选项。
那么,解决这个问题需要用到through参数。更新表结构如下:
执行检索语句:
请注意其中嵌套部分的使用。
(本文参考:http://snippets.dzone.com/posts/show/2089)
在Rails的API里,find方法有如下参数,conditions order group having limit offset joins include select from readonly lock
其中,对于include的解释是说,include选项后的参数,应该是一个已经关联的表。该表信息会在检索后,和检索表信息一起加载。给的例子如下:
Person.find(:all, :include => [ :account, :friends ])
include选项的好处就不举例说了,其实,就和你用游标做全检索,还是join出一个view一个道理。
现在说下面一个情况,有学生表和班级表如下:
class Class < ActiveRecord::Base has_many :students end class Student < ActiveRecord::Base belongs_to :class end
很显然,当我们要输出所有学生的班级信息时,我们会用include如下:
Student.find(:all,:include => [:class], :conditions =>["user_name = ?", user_name])
然而,当我们的要求增加,有一个新的表学校信息也希望检索出来时,那么,表结构如下:
class University < ActiveRecord::Base has_many :class end class Class < ActiveRecord::Base has_many :students belongs_to :university end class Student < ActiveRecord::Base belongs_to :class end
那当我们想要输出所有学生的学校相关信息时,那么,也许我们会想到使用检索语句
Student.find(:all,:include => [:class,:university], :conditions =>["student_name = ?", student_name])
实际上,运行结果是,我们会得到一个':university' is not a valid association of the Student model的错误提示。
这个错误提示,是可以理解的。正如,文章开始的Rails API里所说的include后面的参数应该是一个已经和检索表有关联的表。实际上University和Student表没有直接关联。这时的惯性思维是使用find_by_sql,诚然,的确可以解决。其实,应该嵌套include选项。
那么,解决这个问题需要用到through参数。更新表结构如下:
class University < ActiveRecord::Base has_many :class end class Class < ActiveRecord::Base has_many :students belongs_to :university end class Family < ActiveRecod::Base has_many :students end class Student < ActiveRecord::Base belongs_to :class belongs_to :university, :through => :class belongs_to :family end
执行检索语句:
Student.find(:all,:include => [{:university=>:class},:family], :conditions =>["student_name = ?", student_name])
请注意其中嵌套部分的使用。
(本文参考:http://snippets.dzone.com/posts/show/2089)
评论
2 楼
orcl_zhang
2009-11-18
刚好用到include
1 楼
hexawing
2009-07-20
如果是四层嵌套的怎么办?
比如模型是这样:
是不是应该直接弄一个:through来表示Product和Province之间的关联呢?可是这样的:through怎么写啊?我试了半天都不中啊……
比如模型是这样:
class Province < ActiveRecord::Base has_many :cities end class City < ActiveRecord::Base has_many :factories belongs_to :province end class Factory < ActiveRecod::Base has_many :products belongs_to :city end class Product < ActiveRecord::Base belongs_to :factory end
是不是应该直接弄一个:through来表示Product和Province之间的关联呢?可是这样的:through怎么写啊?我试了半天都不中啊……
发表评论
-
Destroying a Postgres DB on Heroku
2013-04-24 10:58 935heroku pg:reset DATABASE -
VIM ctags setup ack
2012-04-17 22:13 3259reference ctags --extra=+f --e ... -
alias_method_chain方法在3.1以后的替代使用方式
2012-02-04 02:14 3295alias_method_chain() 是rails里的一个 ... -
一些快速解决的问题
2012-01-19 12:35 1472问题如下: 引用Could not open library ... -
API service 安全问题
2011-12-04 08:47 1386这是一个长期关注的课题 rest api Service的 ... -
Module方法调用好不好
2011-11-20 01:58 1349以前说,用module给class加singleton方法,和 ... -
一个ajax和rails交互的例子
2011-11-19 01:53 1908首先,这里用了一个,query信息解析的包,如下 https: ... -
Rails 返回hash给javascript
2011-11-19 01:43 2277这是一个特别的,不太正统的需求, 因为,大部分时候,ajax的 ... -
关于Rubymine
2011-11-18 23:21 2267开个帖子收集有关使用上的问题 前一段时间,看到半价就买了。想 ... -
ruby中和javascript中,动态方法的创建
2011-11-18 21:01 1241class Klass def hello(*args) ... -
textmate快捷键 汇总
2011-11-16 07:20 8147TextMate 列编辑模式 按住 Alt 键,用鼠标选择要 ... -
Ruby面试系列六,面试继续面试
2011-11-15 05:55 2025刚才受到打击了,充分报漏了自己基础不扎实,不肯向虎炮等兄弟学习 ... -
说说sharding
2011-11-13 00:53 1492这个东西一面试就有人 ... -
rails面试碎碎念
2011-11-12 23:51 1946面试继续面试 又有问ru ... -
最通常的git push reject 和non-fast forward是因为
2011-11-12 23:29 17216git push To git@github.com:use ... -
Rails 自身的many to many关系 self has_many
2011-11-12 01:43 2737简单点的 #注意外键在person上people: id ... -
Rails 3下的 in place editor edit in place
2011-11-12 01:20 946第一个版本 http://code.google.com/p ... -
Heroku 的诡异问题集合
2011-11-11 07:22 1697开个Post记录,在用heroku过程中的一些诡异问题和要注意 ... -
SCSS 和 SASS 和 HAML 和CoffeeScript
2011-11-07 07:52 12960Asset Pipeline 提供了内建 ... -
Invalid gemspec because of the date format in specification
2011-11-07 02:14 2122又是这个date format的错误。 上次出错忘了,记录下 ...
相关推荐
Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails ...
本书教您如何使用Ruby on Rails开发和部署真正的,具有工业实力的Web应用程序,Ruby on Rails是为诸如Twitter,Hulu,GitHub和Yellow Pages等顶级网站提供支持的开源Web框架。
Rails Plugins:Extending Rails Beyond the Core
如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:migrate:up VERSION= $ rails db:rollback $ rails db:rollback_to VERSION=...
- **方法**:使用Active Record的方法来进行数据库查询,如`find`、`where`、`joins`等。 - **优化**:为了提高查询效率,可以使用预加载(`includes`)和延迟加载(`references`)等技术减少数据库交互次数。 #### 五...
在Ruby on Rails中,`include`和`extend`是用来引入模块到类或对象中的关键语法,它们可以帮助我们更好地组织和重用代码。这两个关键字的主要区别在于它们如何将模块中的方法添加到目标类或对象。 首先,`include`...
“开发人员的笔记本”记录了一些准则,技术和想法,这些准则,技术和想法将经典的面向对象的思想应用于Ruby on Rails应用程序。
附上Jamis的rdoc模板文件,tar解压即可。 博文链接:https://lgn21st.iteye.com/blog/199681
rails_new 经过精心设计的模板,用于构建现代Rails应用 :fire: 在数分钟而不是数小时内开始使用新应用 :automobile: :dashing_away:入门要克隆该存储库并执行以下步骤: 运行rails credentials:edit config/master....
RAILS: Radial Assembly Improvement by Long Sequence Scaffolding Cobbler: Gap-filling with long sequences 描述 RAILS 和 Cobbler 是基因组学应用程序,用于支架和自动完成具有长 DNA 序列的基因组组装。 它们...
SwaggerYard :: Rails SwaggerYard :: Rails gem是一个Rails引擎,旨在使用SwaggerYard解析您的Yardocs API控制器。 它将创建一个Swagger-UI投诉JSON,以通过安装SwaggerYard :: Rails :: Engine的位置提供。安装将...
Learn Web Development with Rails Clear EPUB version in English, Second Edition “The author is clearly an expert at the Ruby language and the Rails framework, but more than that, he is a working ...
[Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...
在Ruby on Rails框架中,嵌套表单...”这篇文档,开发者不仅可以学习如何使用嵌套表单,还能了解到如何在实际项目中有效地应用和优化这一功能。文档中的示例代码和解释将有助于深入理解这一关键概念,并提高开发效率。
克隆/下载仓库确保Postgres数据库正在运行运行bundle install从Gemfile安装所有gem 运行rails db:drop然后运行rails db:drop rails db:create然后rails db:migrate创建数据库表要启动服务器,请运行命令rails s 在...