如何:Rails 查询返回array

看到类似的文,转回来,翻译一下顺便研讨。

讨论的核心,就是查询的时候,希望能返回一个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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值