热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在rails3中将数据传递给IN查询-HowtopassdatatoINqueryinrails3

Iamworkingonrails3andsqlitedb.UsingaINquery.Currentlypassinganstringvariableofite

I am working on rails 3 and sqlite db. Using a IN query. Currently passing an string variable of items to IN query. But While executing that query it takes '' so it's not working. How to get over this situation?

我正在使用rails 3和sqlite db。使用IN查询。当前将项的字符串变量传递给IN查询。但是在执行该查询时需要''因此它不起作用。如何克服这种情况?

Here is my code

这是我的代码

items = ""
items <<"#{@invitation_user1.id}" <<"," <<"#{@invitation_user2.id}" <<"," <<"#{@user1.id}" <<"," <<"#{@user2.id}" <<"," <<"#{@user2.id}" <<"," <<"#{@profile1.id}" <<"," <<"#{@profile2.id}"
@activities = Version.where("item_id IN (?)","#{items}") 

Tried items.to_i, items.to_s but didn't work. In log i can see this.

尝试过items.to_i,items.to_s但是没有用。在日志我可以看到这一点。

SELECT "versions".* FROM "versions" WHERE (item_id IN ('19,20,4,1,1,4,1'))

But all i need is

但我所需要的只是

 SELECT "versions".* FROM "versions" WHERE (item_id IN (19,20,4,1,1,4,1))

3 个解决方案

#1


22  

You can just pass an array in. Rails is clever enough to to the right thing with it:

你可以直接传入一个数组.Rails很聪明,可以用它来做正确的事情:

items = [
  @invitation_user1.id,
  @invitation_user2.id,
  @user1.id,
  @user2.id,
  @profile1.id,
  @profile2.id
]

@activities = Version.where("item_id IN (?)", items)
# or equivalently:
@activities = Version.where(:item_id => items)

This is vastly preferred over your variant, as Rails properly handles escaping of all passed values for the used database adapter.

这比您的变体更受欢迎,因为Rails正确处理所使用的数据库适配器的所有传递值的转义。

#2


1  

Use array instead of string.

使用数组而不是字符串。

For example

例如

ids = [ @invitation_user1.id, @invitation_user2.id, @user1.id, @user2.id ]

Then easily you can find the records by

然后很容易就可以找到记录了

@versiOns= Version.find_all_by_id(ids)

This will result the query you expected.

这将导致您期望的查询。

SELECT "versions".* FROM "versions" WHERE (item_id IN (19,20,4,1))

#3


1  

What you are looking for is split:

您正在寻找的是分裂:

[1] pry(main)> a = '19,20,4,1,1,4,1'
=> "19,20,4,1,1,4,1"
[2] pry(main)> a.split(',')
=> ["19", "20", "4", "1", "1", "4", "1"]
[3] pry(main)> a.split(',').map(&:to_i)
=> [19, 20, 4, 1, 1, 4, 1]

But, as you are constructing the 'string' manually, better to use an array:

但是,当您手动构建“字符串”时,最好使用数组:

items = Array.new
items <<@invitation_user1.id <<@invitation_user2.id <<@user1.id
items <<@user2.id <<@user2.id <<@profile1.id <<@profile2.id
@activities = Version.where(item_id: items) 

Anyway, the way to get the ids is strange because... what would happen if you added more users? or profiles?

无论如何,获取ID的方式很奇怪,因为......如果添加更多用户会发生什么?或个人资料?

What I would do (seeing as little as we can see in your example)

我会做什么(在你的例子中我们看到的很少)

items = Array.new
items <

and later define those methods, as in:

然后定义这些方法,如:

def get_invitation_user_ids
  InvitationUser.select(:id).map(&:id)
end

...

推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
author-avatar
瀡訫飛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有