Ruby on rails 如何使用RubyonRails进行SQL或SQL搜索?

Ruby on rails 如何使用RubyonRails进行SQL或SQL搜索?,ruby-on-rails,Ruby On Rails,我刚刚开始学习RubyonRails,还没有找到这个问题的答案 我有以下代码: @products = Product.find(:all, :conditions => ["productsubtype_id = ?", @productsubtypes], :order => "name") @productsubtypes是一个数组(当前包含来自另一个SQL查询的两个对象,与此查询几乎相同)-它生成的SQL如下: SELECT * FROM `products` WH

我刚刚开始学习RubyonRails,还没有找到这个问题的答案

我有以下代码:

@products = Product.find(:all,
  :conditions => ["productsubtype_id = ?", @productsubtypes],
  :order => "name")
@productsubtypes是一个数组(当前包含来自另一个SQL查询的两个对象,与此查询几乎相同)-它生成的SQL如下:

SELECT * FROM `products` WHERE (productsubtype_id = 2,3)  ORDER BY name
如您所见,上面的内容无效(至少对MySQL无效)-我需要找到一种方法来更改原始Ruby代码,以生成以下SQL代码(或类似的代码):

SELECT * FROM `products` WHERE (productsubtype_id = 2 
  OR productsubtype_id = 3)  ORDER BY name
有没有办法更改原始代码以满足我的需要,或者我完全走错了方向

谢谢你的帮助

Juan

尝试使用该插件

@产品=产品。查找(:全部

:conditions=>[(?),@productsubtype中的“productsubtype\u id


:order=>“name”)

这两种解决方案都可以工作,但ActiveRecord已经内置了支持,可以在使用条件散列时知道您是传递数组还是传递单个id。例如:

User.all(:conditions => {:id => [1,2,3]})
生成查询

SELECT * FROM `users` WHERE (users.`id` IN( 1,2,3 )) 
所以你会想要

@products = Product.find(:all,
  :conditions => {:productsubtype_id => @productsubtypes},
  :order => "name")

对于更复杂的查询,您需要在条件下传递SQL或使用插件(即AtdithsFuu)

也必须考虑使用IVS。如果在IN中使用的子集非常大,使用一个存在可能会更好。基本上,使用一个连接,而另一个则不使用。“productsubtype_id IN(?)。感谢您在测试时给出的答案,我只需要使用(?)非常感谢-条件_fu正是我要寻找的。

@products = Product.find(:all,
  :conditions => {:productsubtype_id => @productsubtypes},
  :order => "name")