`
like.eagle
  • 浏览: 256170 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ActiveRecord.find方法中":conditions"的应用

阅读更多

在SQL文的查询条件中经常会用得到关键字in,例如:

SELECT * FROM accounts WHERE nick_name = 'nicknm' AND id IN ("1","2");

 

此时如果利用Rails的find方法,代码如下所示:

 

 

require "rubygems"
require "active_record"

module ActiveRecord
class Base
def self.each_cons(n)
offset = 0
loop do
size = yield(offset)
break if size < n
offset += n
end
end
end
end



ActiveRecord::Base.establish_connection(
:adapter => 'mysql',
:host => 'localhost',
:database => 'myapp_development',
:username => 'my',
:password => '123'
)

class Account < ActiveRecord::Base
establish_connection(
:adapter => 'mysql',
:host => 'localhost',
:database => 'myauth_development',
:username => 'my',
:password => '123'
)
end

#condns 是个数组
condns = []
condns << "1"
condns << "2"

#非常值得注意的是:此时传给in(即第二个?)的参数一定要是数组类型的,
#否则返回的不是想要的结果。
#举例说明:如果将condns设置成字符串类型→"1,2",那么下述find方法解析完的
#SQL是SELECT * FROM accounts WHERE nick_name = 'nicknm' AND id #IN ("1,2");
#而我们期待的结果应该是:
#SELECT * FROM accounts WHERE nick_name = 'nicknm' AND id IN 
#("1","2");
accounts = Account.find(:all, 
:conditions => ["nick_name = ? and id in (?)",  "nicknm",  condns],
:order => 'id asc',
:limit => 1000)
分享到:
评论

相关推荐

    Rails3的ActiveRecord 查询API.doc

    在 Rails 2.x 中,许多使用哈希参数的查询方法如 `:conditions`, `:include`, `:joins` 等在 Rails 3.1 中被标记为过时,虽然在3.1版本中仍然可用,但计划在 Rails 3.2 中完全移除。这些变化主要是为了引入一个新的...

    Ruby的25个编程细节(技巧、实用代码段)

    在Rails中,`find` 方法有许多变体,其中之一就是 `find(:first)`,用于查询符合条件的第一条记录。结合 `:conditions` 参数,我们可以指定查询条件。 **示例代码:** ```ruby mobile_info = MobileInfo.find(:...

    Rails 3中的Active Record的查询变化.doc

    在处理条件查询时,旧的`:conditions`参数变成了`where`,例如`Article.find(:all, :conditions =&gt; ["published_at , Time.now], :include =&gt; :comments)`在Rails 3中应写作`Article.where("published_at , Time.now...

    cache-money, 一个通过Cacheing库编写.zip

    cache-money, 一个通过Cacheing库编写 什么是高速缓存缓存是一个通过缓存库进行ActiveRecord的写和...阅读:查询类似 User.find(:all, :conditions =&gt;.. .) 首先查找 Memcached,然后在数据库中查找查询的结果。 如果缓

    享受将SQL注入RubyonRails应用程序的乐趣吧!___下载.zip

    9. **使用防止SQL注入的库**:例如,可以使用`ActiveRecord::Sanitization`模块的`sanitize_sql_array`或`sanitize_sql_for_conditions`方法。 通过了解和应用这些实践,开发者可以在开发Ruby on Rails应用时有效...

    Rails best practices

    @public_posts = Post.find(:all, :conditions =&gt; {:state =&gt; 'public'}, :limit =&gt; 10, :order =&gt; 'created_at desc') @draft_posts = Post.find(:all, :conditions =&gt; {:state =&gt; 'draft'}, :limit =&gt; 10, :...

    wherex:使用 Regexp 作为 ActiveRecord 中任何查找器的值

    对 ActiveRecord 查找器的正则表达式支持。 安装 Wherex 是 ,这意味着我们将始终指示向后不兼容的更改与主要版本碰撞,因此您可以在Gemfile使用它: gem 'wherex' , '~&gt; 1.0' 仅适用于 Rails &gt;= 3.1 例子 # ...

    ruby元编程之创建自己的动态方法

    在Rails框架中,`method_missing`被广泛用于 ActiveRecord 模型中,以支持动态查找方法。例如,如果你有一个名为`User`的模型,并且其中包含一个`email`字段,那么你可以通过以下方式查询用户: ```ruby User.find_...

Global site tag (gtag.js) - Google Analytics