2011-04-02 54 views
0

如何將Mysql2 :: Result結果轉換爲某個對象? 我使用:Mysql2 ::結果到對象

@users = ActiveRecord::Base.connection.execute("SELECT sum(summ) as prize, u.* FROM `tournaments` t, `users` u WHERE u.id = t.user_id GROUP BY t.user_id ORDER BY prize desc LIMIT 10") 

我需要這個結果映射到某個物體,或smthg這樣。 謝謝。

回答

2

我的理解是,你可以在任何模型上執行這樣的SQL查詢,它會返回數據作爲該模型的實例。請閱讀find_by_sql。這是來自文檔的示例。請注意,是返回一個Post對象:

Post.find_by_sql "SELECT p.title, c.author FROM posts p, comments c WHERE p.id = c.post_id" 
> [#<Post:0x36bff9c @attributes={"title"=>"Ruby Meetup", "first_name"=>"Quentin"}>, ...] 

Rails 3的查詢語法應該給你所有你需要拿到雖然此信息。我會盡可能避免使用原始SQL,您可以非常快速地將它綁定到特定的數據庫。看看here獲得一些靈感。

傳遞PARAMS到的find_by_sql可以這樣做:

irb(main):015:0> y Location.find_by_sql(["select address, name from locations where name = :name and address = :address", {:address => "Arts Court 2 Daly Ave, Ottawa, ON", :name => "Studio B"}]) 
--- 
- !ruby/object:Location 
    attributes: 
    name: Studio B 
    address: Arts Court 2 Daly Ave, Ottawa, ON 
    attributes_cache: {} 

changed_attributes: {} 

destroyed: false 
marked_for_destruction: false 
new_record: false 
previously_changed: {} 
+0

謝謝,我怎麼能傳遞兩個或更多PARAMS到的find_by_sql方法? – 2011-04-02 15:22:19

+0

解決Question.find_by_sql([sql,'2011-04-06',1]) – 2011-04-02 15:52:48

+0

我給我的答案添加了一個例子。 – mikewilliamson 2011-04-02 16:05:25