В моем контроллере я хочу использовать один и тот же код как внутри других методов в классе, так и снаружи через JSON.Можно ли объединить их в один метод?
В настоящее время я определяю два метода класса, один из которых является тонкой оберткой вокруг другого, например:
class TestController < ApplicationController
respond_to :json
def foo_external
respond_with foo_internal
end
def some_other_method
...
q = foo_internal
...
end
private
def foo_internal
return {
:a => 1,
:b => 2,
}
end
end
Из другогометоды в том же классе, я вызываю foo_internal
, но из JavaScript я вызываю foo_external
, чтобы вернуть результат в виде JSON.Можно ли объединить их в один метод foo
?Примерно так:
class TestController < ApplicationController
respond_to :json
def foo
r = {
:a => 1,
:b => 2,
}
respond_to do |format|
format.html { return r }
format.js { respond_with r }
end
end
def some_other_method
...
q = foo
...
end
end
Этот код работает, когда some_other_method генерирует HTML-ответ, но завершается неудачно, когда some_other_method пытается сгенерировать JSON-ответ.
Я использую Rails 3.