从rails

时间:2016-11-23 07:14:42

标签: mysql ruby-on-rails

我在数据库(MySQL)中有一个模型和一个表。两个表中都有一个共同的列。我正在使用

编写数据库查询
ActiveRecord::Base.connection.execute sql
  where 
    sql = "select table_1.common_column, table_1.column_1, table_1.column_2, table_2.column_1, table_2.column_1"

这给出了一个数组数组,每个数组中有5列。

所以,我有两个问题

  1. 所有数组是否都有与[common_column, table_1.column_1, table_1.column_2, table_2.column_1, table_2.column_1]相同的数据?

  2. 我有什么有效的方法可以使用吗?

2 个答案:

答案 0 :(得分:0)

您可以按common_column加入两个表,并使用select来表示表列。在我的示例中,我有questionsjobs表,其中包含公共列user_id

ActiveRecord::Base.connection.select_all(
  Question.
    joins('INNER JOIN answers ON questions.asker_id = answers.answerer_id').
    select('questions.*, answers.*'))

select中,您可以更详细,别名列

select('questions.description as q_desc, answers.description as ans_desc')

答案 1 :(得分:0)

另一种选择是使用includespreloadeager_load方法。这里很好article about it

使用示例:

Question.includes(:answers).find_each do |question|
  do_something_with_question_columns(question.column_1, question.column_2, ...)
  question.answers.each do |answer|
     do_something_with_answer_columns(answer.column_2, answer.column_2, ...)
  end
end