看到类似的文,转回来,翻译一下顺便研讨。
讨论的核心,就是查询的时候,希望能返回一个array的数据。比如,符合条件的id组成的数组。
然后,如果是我的话,我首先会
Model.find(:all,:conditions=>["?",params]).collect{|mod|mod.id}
可能没有考虑效率的问题。好吧,还是看看原文作者想说啥吧:
作者,首先想到的是:
Model.find(:all, :select => 'id')
但是,这样只能返回一个model实例和id的序列,如下:
>> User.find(:all,:select=>'id')
#=> [#<User id: 1>, #<User id: 2>, #<User id: 3>, #<User id: 4>, #<User id: 5>]
然后,原文作者就想了,如果,需要的是值对的序列(array of values),那就用select_values吧,如下:
>> User.connection.select_values("select id from users")
#=> ["1", "2", "3", "4", "5"]
喔,显然,这样是可以实现目地了。但是,文主,并不满意而且考虑如果在复杂查询的情况下,还希望能使用Rails的finder方法。
于是,文主说使用construct_finder_sql,这个东西我比较不熟悉
如下使用:
sql = Model.send(:construct_finder_sql, :select => 'id', :conditions => [...])
Model.connection.select_values(sql)
试了试,还是挺好用的如下:
>> sql=User.send(:construct_finder_sql,:select=>'id',:conditions=>["id <= 4"])
#=> "SELECT id FROM `users` WHERE (id <= 4) "
>> User.connection.select_value(sql)
#=> "1"
>> User.connection.select_values(sql)
#=> ["1", "2", "3", "4"]
需要说明的是,construct_finder_sql是私有 方法,要使用send。select_value就返回一个。
然后,文主鼓吹,这样写的好处是
1. 使用更少的内存,因为没有创建model
2. 你也可以使用select_rows返回array of arrays
分享到:
相关推荐
- **Array的扩展**:列举Array类被扩展后的新方法。 - **Hash的扩展**:展示Hash类的扩展方法。 - **Regexp的扩展**:说明Regexp类的扩展方法。 - **Range的扩展**:列举Range类被扩展后的新方法。 - **Date的扩展**...
在Rails中创建数组类型的字段,可以在迁移(migration)文件中通过`:array => true`选项来实现。例如,以下代码创建了一个名为`table_with_arrays`的表,其中包含两个整数数组列`int_array`和`int_array_length`,以及...
b 一个更简单,更快速的Jbuilder替代方案。 安装 ....jb模板应包含Ruby代码,该代码将返回任何to_json (通常为Hash或Array)的Ruby对象。 然后,返回值将to_json修改为JSON字符串。 例子 # app/vi
我们需要能够使用字符串查询来搜索用户和地址,该查询将从数据库中返回该字符串恰好在哪里的所有匹配记录,例如,如果我在用户中搜索“ anelle”,则我希望所有匹配记录是否都在字符串上用户的名字,姓氏,昵称,...
6. **Ruby on Rails**:一个流行的 Web 开发框架,用于构建数据库驱动的 Web 应用。 Ruby 广泛应用于 Web 开发、脚本编写、自动化任务等领域。其优雅的语法和强大的功能使其备受开发者青睐。 #### 迭代方法:`each...
- **数据库操作**:连接 MySQL 数据库,执行 SQL 查询。 #### 其他技术 - **CakePHP**:基于 PHP 的 MVC 框架。 - **Django**:基于 Python 的 MVC 框架。 - **Dojo**:JavaScript 库,提供丰富的用户界面组件。 -...
9. **使用防止SQL注入的库**:例如,可以使用`ActiveRecord::Sanitization`模块的`sanitize_sql_array`或`sanitize_sql_for_conditions`方法。 通过了解和应用这些实践,开发者可以在开发Ruby on Rails应用时有效...
例如,`array.each { |item| puts item }`用于打印数组的所有元素。 2. 魔术方法:Ruby允许定义“魔术方法”,如`initialize`(初始化对象)、`to_s`(转化为字符串)和`==`(比较操作)。这些方法可以增强类的行为...
- **表达式:** Ruby几乎每条语句都可以视为表达式,返回一个值。 - **集合:** 包括数组(Array)和哈希(Hash)等数据结构。 - **控制结构:** 如条件语句(if/elsif/else)和循环(for/while)等。 - **面向对象编程:** ...
在处理数据库查询结果时,`compact`和`slice`方法能帮助快速整理数据结构。 四、提高开发效率与团队协作 引入"crystal_on_steroids"不仅能够提升个人的编程效率,还能提高团队间的代码一致性。当整个团队都使用这...
或者可以替代Rails的强参数(它不依赖于Rails,可以独立使用)。 架构图 定义架构 schema = Parametric :: Schema . new do field ( :title ) . type ( :string ) . present field ( :status ) . options ( [ ...
6. **数组(Array)和哈希(Hash)**:Ruby提供了强大的数组和哈希数据结构,支持多种操作,如迭代、查找、排序等。 7. **异常处理**:Ruby的异常处理使用begin..rescue..else..ensure结构,允许开发者优雅地处理...
Proc和Lambda是代码块的两种表示形式,它们可以被赋值给变量,作为参数传递或返回。 4. **闭包**:Proc和Lambda是闭包,能捕获定义时的局部变量,即使在定义的上下文之外也能访问。 5. **元编程**:Ruby允许在运行...
11. **Rails框架**:Ruby on Rails是基于Ruby构建的一个开源Web应用程序框架,遵循MVC(Model-View-Controller)架构模式,大大简化了Web应用的开发过程。 通过深入学习Ruby语言,你可以掌握一种高效且富有表达力的...
散列表的键可以是任何类型,包括符号(如`stuff = {:array => [1, 2, 3], :string => 'Hi, mom!'}`)。通过键可以访问对应的值,如`stuff[:string]`返回`"Hi, mom!"`。散列表在Ruby中广泛用于数据存储和查找。 总的...
- Lambda类似Proc,但更严格,如在返回时不会自动返回上级作用域。 7. **异常处理**: 使用`begin/rescue/ensure/finally`处理运行时错误,确保程序的健壮性。 8. **符号(Symbol)**: 符号是不可变的,代表...
同时,由于其与Rails框架的紧密集成,常被用于Ruby on Rails项目中。 五、学习资源与社区 学习Prototype.js,可以参考官方文档,查阅各种教程和示例代码,同时,Stack Overflow 和其他开发者论坛是获取帮助和分享...
**collect**:也称为`map`,用于遍历集合并返回一个新的数组,新数组中的元素是原数组中元素经过指定操作后的结果。例如: ```ruby arr = [1, 2, 3] new_arr = arr.collect { |x| x * 2 } # new_arr 的值为 [2, 4, 6...
- **数据类型**:Ruby是动态类型语言,主要的数据类型包括字符串(String)、整数(Integer)、浮点数(Float)、布尔值(Boolean)、数组(Array)、哈希(Hash)等。 - **方法**:Ruby中的函数被称为方法,可以定义在类或...