【问题标题】:How to make an Active Record to Sequel transition如何进行 Active Record 到 Sequel 的转换
【发布时间】:2010-07-28 20:20:37
【问题描述】:

我正在使用 Rails3.rc 和 Active Record 3(带有 meta_where),并且刚刚开始切换到 Sequel,因为它似乎更快并且提供了一些非常棒的功能。

我已经在使用 active_model 插件(以及其他一些插件)。

  1. 据我所知,我应该使用User[params[:id]] 而不是User.find(params[:id])。但是,如果不存在记录并且不将值转换为整数(PK 类型),则不会引发此问题,因此它是where 子句中的字符串。我不确定这是否会导致任何性能问题。这会伤害identity_map吗?解决这两个问题的最佳方法是什么?

  2. 是否有一种简单的方法可以翻转 User.messages_datasetUser.messages 等关联的使用,从而使 User.messages 的行为类似于 Active Record (User.messages_data_set) 中的行为。我想我会经常使用#..._dataset,但从不需要数组方法,因为我可以添加.all

  3. 我注意到一些相同的(复杂的)查询有时会在一个操作中执行多次。有没有类似 Active Record 查询缓存的东西? (identity_map 似乎不适用于这些情况)。

  4. 我可以调用to_sql 来获取数据集将生成的原始 SQL 吗?

【问题讨论】:

    标签: ruby-on-rails ruby activerecord sequel


    【解决方案1】:
    1. 您可以使用:

      User[params[:id].to_i] || raise Sequel::Error
      

      或者编写你自己的方法来做类似的事情。 Sequel 支持非整数主键,因此它不会自动进行转换。它不应该对身份映射有任何影响。请注意,除非您使用 identity_map 插件,否则 Sequel 不会使用身份映射。我想最好的方法是编写自己的辅助方法。

    2. 并非如此。您可以使用association_proxies 插件,以便将非数组方法发送到数据集而不是对象数组。一般来说,您不应该过多地使用关联数据集方法。如果您经常使用它,则表明您应该与该特定用途有关联。

    3. 存在并且永远不会存在查询缓存。您应该编写您的操作,以便缓存和重用第一个查询的结果。

    4. Dataset#sql 为您提供数据集的 SELECT SQL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      相关资源
      最近更新 更多