有没有办法在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查询或帮助方法调用,在文件中生成文本。这样,文本渲染只进行一次(每次代码更改),而不是每次调用方法?
答案 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。