Другим вариантом является не входить в систему гостевого пользователя, но сделать так, чтобы current_user возвращал гостевого пользователя в отсутствие вошедшего в систему пользователя.
В приведенном ниже примере, если пользователь не вошел в систему, current_user
вернет гостевого пользователя. Таким образом, любой контроллер, к которому можно получить доступ без входа, не нуждается в authenticate_user!
перед фильтром.
def current_user
super || guest_user
end
def guest_user
User.find(session[:guest_user_id].nil? ? session[:guest_user_id] = create_guest_user.id : session[:guest_user_id])
end
def create_guest_user
token = SecureRandom.base64(15)
user = User.new(:first_name => "anonymous", :last_name => 'user', :password => token, :email => "#{token@example.com}")
user.save(:validate => false)
user
end