Ruby on rails 如何将rails数组mysql传递到何处
我有一个如下的数组Ruby on rails 如何将rails数组mysql传递到何处,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个如下的数组 skills = ['ruby','Ruby on Rails']; 我试图在mysql中传递数组,条件如下 questions = MysqlConnection.connection.select_all(" SELECT questions.*,quest_answers.* FROM `questions` INNER JOIN `quest_answers` ON `quest_a
skills = ['ruby','Ruby on Rails'];
我试图在mysql中传递数组,条件如下
questions = MysqlConnection.connection.select_all("
SELECT questions.*,quest_answers.* FROM `questions`
INNER JOIN `quest_answers` ON `quest_answers`.`question_id` =
`questions`.`id` where questions.category IN (#{skills.join(', ')})")
但它并没有工作,如何才能将数组传递到条件中的何处
我犯了一个错误
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'on rails, Ruby)' at line 1: SELECT questions.*,quest_answers.* FROM `questions` INNER JOIN `quest_answers` ON `quest_answers`.`question_id` = `questions`.`id` where questions.category IN (Ruby on rails, Ruby)
您正在将数组的字符串表示形式传递给MySQL,这不起作用。您需要将数组中的值插入查询中。这可以通过逃避技能并加入它们来实现:
skills.map { |s| "'#{s}'" }.join(', ')
这将生成“ruby”、“RubyonRails”
,这是IN语句的有效参数
然而,更好的方法是根本不编写原始SQL,而是依赖ActiveRecord生成它。这是更易于维护和可读的方法
Question.joins(:quest_answers).where(category: skills)
将数组传递给,其中
会自动将其转换为。您将数组的字符串表示形式传递给MySQL,这不起作用。您需要将数组中的值插入查询中。这可以通过逃避技能并加入它们来实现:
skills.map { |s| "'#{s}'" }.join(', ')
这将生成“ruby”、“RubyonRails”
,这是IN语句的有效参数
然而,更好的方法是根本不编写原始SQL,而是依赖ActiveRecord生成它。这是更易于维护和可读的方法
Question.joins(:quest_answers).where(category: skills)
将数组传递到
,其中会自动将其转换为。为什么不使用ActiveRecord
?为什么不使用ActiveRecord
?嗨,jdno,你的答案解决了我的问题,非常感谢。你采取了什么方法?原始SQL还是ActiveRecord?首先我尝试使用ActiveRecord,但它只提供第一个表中的数据,所以我采用了原始SQL方法。感谢you@ManjunathC使用ActiveRecord
可以使用includes(:quest\u answers)为您提供两组数据。引用(:quest\u answers)
这将执行与原始sql基本相同的操作,但也会将返回值转换为真正的AR对象。好的@engineersmnky感谢您的建议,我将尝试一下。嗨,jdno,你的回答解决了我的问题,非常感谢。你采取了什么方法?原始SQL还是ActiveRecord?首先我尝试使用ActiveRecord,但它只提供第一个表中的数据,所以我采用了原始SQL方法。感谢you@ManjunathC使用ActiveRecord
可以使用包含(:quest\u answers)为您提供两组数据。引用(:quest\u answers)
这将执行与原始sql基本相同的操作,但也会将返回值转换为真正的AR对象。好的@engineersmnky感谢您的建议,我将尝试此操作。