Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将rails数组mysql传递到何处_Ruby On Rails_Ruby - Fatal编程技术网

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感谢您的建议,我将尝试此操作。