2010-07-28 70 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。