2010-07-28 69 views
1

我使用rails3.rc和activerecord3(與meta_where)剛開始切換到續集,因爲它似乎更快是muuuuch,並提供了一些非常強大的功能:-)的ActiveRecord到續集過渡

我m已經在使用active_model插件(和其他一些插件)。但這裏有一些問題,我發現,這是我沒有找到任何文件:

  1. 據我知道,我應該使用用戶[PARAMS [:編號],而不是User.find(PARAMS [ :ID])。但是,如果沒有記錄存在並且不將值轉換爲整數(PK類型),那麼他不會引發,因此它在where子句中是字符串。我不確定這是否會導致任何性能問題(所有數據庫服務器仍然正確使用密鑰?)。這是否會損害identity_map?解決這兩個問題的最好方法是什麼?

  2. 是否有一種簡單的方法來反轉使用像User.messages_dataset和User.messages這樣的關聯?這樣User.messages的行爲就像AR(= User.messages_data_set)。我想我會使用#..._數據集很多,但從不需要數組方法,因爲我可以只添加.all?

  3. 我注意到一些相同的(複雜)查詢有時會在一個動作中多次執行。有沒有像AR查詢緩存? (identity_map似乎不適用於這些情況)。

  4. 是否存在#to_sql我可以調用以獲取數據集將生成的原始SQL?

感謝任何提示:-)

回答

3
  1. 您可以使用:

    用戶[PARAMS [:ID] .to_i] ||提升續集::錯誤

    或者寫你自己的方法,做那樣的事情。續集支持非整數主鍵,所以它不會自動進行轉換。它不應該對身份地圖有任何影響。請注意,除非您使用identity_map插件,否則Sequel不會使用身份地圖。我想最好的方法是編寫你自己的幫手方法。

  2. 不是。您可以使用association_proxies插件,以便將非數組方法發送到數據集而不是對象數組。一般來說,你不應該使用關聯數據集方法。如果你使用它很多,這是一個跡象表明你應該有一個特定用法的關聯。

  3. 存在且不會存在查詢緩存。您應該編寫自己的操作,以便第一個查詢的結果被緩存並重用。

  4. 數據集#sql爲您提供數據集的SELECT SQL。