Ruby on Rails 3을 사용하고 있는데 to_param
메서드를 사용하여 모델에서 URL을 다시 쓸 때 캐싱에 문제가 있습니다. 내 사용자 모델에서URL을 다시 쓸 때 동작을 캐시 할 때 문제가 발생했습니다.
내가 가진 : 사용자 컨트롤러에서
class User < ActiveRecord::Base
def to_param # Rewrites URL
"#{self.id}-#{self.name}-#{self.surname}"
end
...
end
내가 가진 다음 사용자에
class UsersController < ApplicationController
caches_action :show
def show
...
end
end
내가 가진 스위퍼 :
class UsersSweeper < ActionController::Caching::Sweeper
observe User
def after_save(user)
clear_users_cache(user)
end
def after_destroy(user)
clear_users_cache(user)
end
def clear_users_cache(user)
expire_action :controller => :users, :action => :show, :id => user
end
end
를 이제 때 내가 내가 얻은 로그 파일에서 사용자 쇼 페이지를 찾습니다.
Write fragment views/<my_site_name>/users/2-Test_name-Test_surname (0.3ms)
나는 데이터가 변경되기 때문에, 그래서
Expire fragment views/<my_site_name>/users/2-New_test_name-New_test_surname (0.3ms)
를 얻을 변경 로그 파일의 이름이나 성 후 캐시를 만료하면 레일 시도하기 때문에,이 캐시 만료되지 않습니다 만료일은 2-New_test_name-New_test_surname
이고 2-Test_name-Test_surname
이 아닙니다.
레일즈 캐싱 동작을 "easly"처리하여 작동되게하려면 어떻게해야합니까? 나는 to_param
방법을 사용하지 않는 경우 물론
P.S는 :, 그것은뿐만 아니라 작동합니다.
업데이트]
나는이
caches_action :show, :cache_path => Proc.new { |c| 'users/' + c.params[:id].split('-').first }
뭔가를 할 수 있지만 내가 그 일을 해결하는 좋은 방법이라고 생각하지 않습니다 ...
': cache_path => {: project => "# {@ user.id} - # {@ user.firstname}-#{@user.lastname}"}'및 다른 사람들은 "experiment "하지만 작동하지 않습니다. 어쨌든 레일스가 캐시를 만료하기 직전에 사용자 이름과 성이 변경되어서 '2-Test_name-Test_surname'이 아닌 '2-New_test_name-New_test_surname'만료를 시도하기 때문에 저에게 도움이되지 않을 것이라고 생각합니다. 어쩌면 이전의 사용자 이름과 성을 그대로 유지해야합니다. – user502052
나는 가능한 해결책을 추가하는 질문을 업데이트했지만 최선의 해결책은 아닙니다. – user502052
질문을 편집 한 솔루션이 최고가 아닌 이유는 무엇입니까? 그것은 당신이해야 할 일을 정확히 수행하고 내 대답을 기초로 사용합니다. –