如何在自定义SQL调用中添加自定义变量

如何在自定义SQL调用中添加自定义变量,sql,ruby-on-rails,arrays,Sql,Ruby On Rails,Arrays,我试图查询字符串数组。me_topics_users表是Rails自动生成的表,因此要查询它,必须使用自定义SQL @topics = self.distributions.map(&:me_topic).compact ActiveRecord::Base.find_by_sql("SELECT * FROM `me_topics_users` WHERE (me_topic_id IN (#{@topics.join(', ')}))") 但这也带来了: NoMethodError

我试图查询字符串数组。me_topics_users表是Rails自动生成的表,因此要查询它,必须使用自定义SQL

@topics = self.distributions.map(&:me_topic).compact
ActiveRecord::Base.find_by_sql("SELECT * FROM `me_topics_users` WHERE (me_topic_id IN (#{@topics.join(', ')}))")
但这也带来了:

NoMethodError: undefined method `abstract_class?' for Object:Class
from /Users/macuser/Sites/hq_channel/vendor/rails/activerecord/lib/active_record/base.rb:2207:in `class_of_active_record_descendant'
from /Users/macuser/Sites/hq_channel/vendor/rails/ac
我做错了什么

已使用替换进行更新,但仍然得到相同的错误

更简单的版本:

ActiveRecord::Base.connection.execute(["SELECT * FROM me_topics_users WHERE me_topic_id= ?", '4'])
返回:

ActiveRecord::StatementInvalid: TypeError: wrong argument type Array (expected String): SELECT * FROM me_topics_users WHERE me_topic_id= ?4
from /Users/macuser/Sites/hq_channel/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:212:in `log'
from /Users/macuser/Sites/hq_channel/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:320:in `execute'
from (irb):51
from :0

您可以像使用ActiveRecordfind一样使用字符串替换技术

find_by_sql(["SELECT * FROM `me_topics_users` WHERE (me_topic_id IN (?))",@topics.join(', ')])

不是真的。我试过很多种方法,但似乎都不管用。。ActiveRecord::Base.connection.execute[SELECT*FROM?,me\u topics\u users]另一个不起作用的示例,ActiveRecord::Base.connection.execute[SELECT*FROM me\u topics\u users,其中me\u topic\u id=?,'4']好的,find\u by\u sql仅适用于activerecords。我想你成功了。。我可以从你的回答中看出这是个坏主意。现在它可能很好用,但只要等到有人用一个锤子打你。@BrianDonovan那就来点智慧吧!:我也在努力避免这样做。。。我在rails之外使用ActiveRecord,清理sql有点棘手loophole@RGB你到底想完成什么?我也许可以帮你。不过,请将我链接到一个新的Stackoverflow问题。我想把你的情况放在这个评论之外。
find_by_sql(["SELECT * FROM `me_topics_users` WHERE (me_topic_id IN (?))",@topics.join(', ')])
ActiveRecord::Base.connection.execute("SELECT * FROM `me_topics_users` WHERE (me_topic_id IN ('#{@topics.join("', '")}') )")