2016-11-23 36 views
0

我有一个模型和数据库中的表(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列的数组的数组。

所以,我有2个问题

  1. 所有的阵列将拥有像[common_column, table_1.column_1, table_1.column_2, table_2.column_1, table_2.column_1]相同的序列数据?

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

回答

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') 
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 
+0

但这只会如果模型之间的关联,工作的权利? –

+0

是的,你有这些表的模型类吗? – mixan946

+0

没有模型。 ActiveRecord :: Base.connection.select_all(sql_query)给出了结果作为列名的哈希值,以便为我工作。 –