Hello,
I've recently migrated my application to Rails 3, and I encounter problems
with the new system of SQL-caching.
I have a 'category' action on my PostsController that I access through a
standard *:controller/:action/:id* route (
www.my_app.net/posts/category/something), and runs a query to find posts
tagged with my parameter using the plugin
*acts_as_taggable_on_steroids* : *@posts
= Post.find_tagged_with(params[:id])*
When I restart the server, the query looks like this in my logs :
Post Load (0.2ms) SELECT DISTINCT medias.* FROM `medias` INNER JOIN
taggings medias_taggings ON medias_taggings.taggable_id = medias.id AND
medias_taggings.taggable_type = 'Media' INNER JOIN tags medias_tags ON
medias_tags.id = medias_taggings.tag_id WHERE `medias`.`type` IN ('Post')
AND ((medias_tags.name LIKE 'something'))
... which is perfectly correct.
But when I actualize the page, the query is loaded from cache without its
parameters and looks like this in the logs :
Post Load (0.7ms) SELECT `medias`.* FROM `medias` WHERE `medias`.`type` IN
('Post')
... so I get many results that aren't correct.
I've seen people getting around this problem with the 'uncached' block :
*Post.uncached do
@posts = Post.find_tagged_with(params[:id])
end*
This solution doesn't work on my application, I still get the correct
result only on the first page load. I even tried to force the query by
calling Rails.logger.debug @posts inside the block, to no avail.
I've read that appending '.all' to the call can force the query too, but
find_tagged_with returns an Array, not a Relation, and '.all' isn't defined
on Arrays.
What am i missing ? Don't hesitate to ask if I'm unclear, as I'm not a
native English speaker.
Thank you for your help
Cyril
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.