2012-06-07 2 views
1

Пожалуйста, рассмотрим следующий метод в контроллере:Как вернуть JSON или Ruby хэш из контроллера?

def get_navigation_from_session 
    respond_to do |format| 
    format.json { render json: session[:navigation]} 
    end 
    return session[:navigation] 
end 

То, что я хочу, чтобы это сделать, это ответить на вызов Ajax и отправить навигации хэш, если это соответствующий запрос. Если нет, я просто хочу, чтобы он возвращал хэш в код рубина, который ему нужен. Очевидно, это не работает. Как я могу исправить вышеуказанный метод для достижения этой цели?

Спасибо

+0

Вы должны беспокоиться только о написании ответа изнутри действия контроллера, не возвращает какой-либо ценности. Вы должны изменить любой код, вызывающий действие контроллера, и ожидание возврата Hash. Трудно дать вам хорошее решение, не понимая, что вы пытаетесь выполнить с помощью кода. Возможно, если вы разместите остальную часть кода или объясните, что вы пытаетесь сделать, кто-то может помочь вам перестроить ваш код. –

+0

Спасибо Огз. Я храню навигационные координаты в сеансе, где пользователь находится в приложении. Мне нужно постоянно обновлять что-то в макете на основе этой информации, поэтому я хочу, чтобы некоторые Ajax проходили через контроллер приложений (казалось, логическое место, чтобы сделать маршрут) и узнали. Я был бы признателен, если бы вы могли направить меня в направлении лучших практик здесь. –

ответ

0
# this is your action method, supposed to be called via your request cycle with rendering 
def get_navigation_from_session 
    respond_to do |format| 
    format.json { render json: get_navigation_hash_from_session } 
    end 
end 

# a getter - maybe higher up in controller hiararchy 
def get_navigation_hash_from_session 
    session[:navigation] 
end 
Смежные вопросы