Rails优化(使用activerecord和view helpers)

时间:2009-11-11 19:59:17

标签: ruby-on-rails activerecord helpers

有没有办法在Rails中执行此操作: 我有一个activerecord查询

@posts = Post.find_by_id(10)

无论何时调用查询,都会在看起来像这样的数据库中生成并执行SQL

SELECT * FROM 'posts' WHERE id = 10

执行AR查询的每个时间都会发生这种情况。类似于这样的辅助方法

<%= f.textarea :name => 'foo' %> 
#=> <input type='textarea' name='foo' />

我编写了一些Railsy代码,生成一些其他系统(数据库,Web浏览器)使用的文本。我想知道是否有办法编写AR查询或帮助方法调用,在文件中生成文本。这样,文本渲染只进行一次(每次代码更改),而不是每次调用方法?

3 个答案:

答案 0 :(得分:1)

看一下这行,它可能会进入第一个数据库,但可能会在行开头说CACHE意味着它将进入ActiveRecord的查询缓存。

对我来说,你也想要缓存页面,而不是查询。即使它是查询,我也不认为它像find_by_id(10)那样简单:)

答案 1 :(得分:0)

我不确定我完全理解你的问题。

如果您询问生成的查询,只需执行find_by_sql并编写自己的SQL,如果您不想使用活动记录动态方法。

如果您要求将结果集缓存到文件中,它已经存在于数据库中,我不知道如果它在文件中会更有效。

答案 2 :(得分:0)

就像Radar建议的那样,你应该研究一下Rails缓存。您可以从内存存储或文件缓存等简单的东西开始,然后在必要时转移到更好的内容,如memcached。你可以在helper方法中引入一些缓存,它会在查询一次后缓存结果。例如,您可以这样做:

    id = 10 # id is probably coming in as a param/argument
    cache_key = "Post/#{id}"
    @post = Rails.cache.read(cache_key)
    if @post.nil?
      @post = Post.find_by_id(id)
      # Write back to the cache for the next time
      Rails.cache.write(cache_key,@post)
    end

剩下要做的唯一事情就是输入一些代码,以便在帖子更改时使缓存条目失效。为此,请看一下在Rails中使用“Sweepers”。或者,您可以查看一些缓存宝石,如Cache-fu和Cached-model。