2016-11-23 33 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)給出了結果作爲列名的哈希值,以便爲我工作。 –