看完後:thisactiverecord - 如何獲得連接表的所有列
我還是不明白。在控制檯中:
puts Category.joins(:posts)
它在類別和帖子上執行連接或左連接。
但是,返回的所有數據只是分類表中的列。如何在Post中獲取這些列數據。 ?
我應該讓另一個模型來實現這個嗎?
看完後:this find_by_SQL是唯一的方法嗎?如果可能的話,我想要ActiveRecord方式。
謝謝。
看完後:thisactiverecord - 如何獲得連接表的所有列
我還是不明白。在控制檯中:
puts Category.joins(:posts)
它在類別和帖子上執行連接或左連接。
但是,返回的所有數據只是分類表中的列。如何在Post中獲取這些列數據。 ?
我應該讓另一個模型來實現這個嗎?
看完後:this find_by_SQL是唯一的方法嗎?如果可能的話,我想要ActiveRecord方式。
謝謝。
你可以做進一步的查詢,像得到的職位表中的列 -
Category.joins(:posts).collect{|category| category.posts.map{|post| post.attributes.merge(category.attributes) } }
這會給你崗位的一個巨大的列表和類別屬性合併在一起爲每個類別。
但是,在類別上進行連接的要點是獲得一組具有某些特定連接條件的類別。如果我們把下面的例子同樣的指南中,
Post.joins(:category, :comments)
這也只給你的職位名單,但名單隻包含下面的加盟約束,這是崗位,他們都有一個類別,一條評論。
請注意,'collect'可能會導致N + 1查詢問題。爲了避免這種情況,使用'includes'。請參閱[關於急切加載的RoR指南](http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations) – 2012-02-27 11:21:04
@m_x當然,該代碼僅供演示。 – abhishek 2012-02-27 11:37:43
謝謝@m_x和abhishek – 2012-02-27 11:44:17
您可以嘗試select()方法:
Category.select("categories.*, posts.*").joins(:posts)
感謝您的回覆。這是行不通的。它仍然只返回「類別。*」。雖然生成的SQL是「SELECT categories。*,posts。* from ... – 2012-02-27 10:28:30
如何檢查它是否正常工作?我剛測試過它,對我來說工作正常 – Ineu 2012-02-27 10:53:02
我在」rails console「中運行此命令, 。使用puts和ap(真棒打印): puts Category.select(「categories。*,posts。*」)。joins(:posts) 它只返回#
您應該更具體地瞭解您嘗試實現的目標。如果你想要它「活動記錄方式」,你甚至不應該談論「列」,因爲你操縱對象而不是表格。如果你真的需要原始數據,你可以使用'ActiveRecord :: Base.connection.select_all('SELECT ...')',這將返回一個散列數組(無模型實例)。 [文檔在這裏](http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#method-i-select_all) – 2012-02-27 11:18:20
謝謝,我現在使用這種方式:ActiveRecord :: Base.connection .select_all(Category.joins(:posts).to_sql)),這樣太討厭了嗎? – 2012-02-27 11:20:49
沒問題。但是,如果您確實想要使用ORM方式,則應該只對這些真正複雜的SQL查詢使用這些技巧。對於這樣一個微不足道的問題,我會使用@ abhishek的解決方案+'includes'來代替。如果你不用OO方式編碼,爲什麼還要使用ORM呢? – 2012-02-27 11:35:44