1

我正在使用 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?

4

1 回答 1

3
  1. 您可以使用:

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

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

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

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

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

于 2010-07-31T00:49:27.617 回答