Я пытаюсь создать JSONP API для моего приложения Rails 3 . Прямо сейчас в моих контроллерах у меня есть много действий, которые следуют этому шаблону:
# This is from my users_controller.rb, as an example
def index
@users = User.all
respond_with(@users, :callback => params[:callback])
end
Хотя это работает как есть, я хотел бы ОСУШИТЬ его, не повторяя : callback => params [: callback ]
в каждом вызове действия response_with
. Как я могу это сделать?
Обновление: Одна вещь, которую я понял, что некрасиво в моем приведенном выше коде, это то, что : callback => params [: callback]
будет передан для любого формата ответа, а не только JSON. Следующий код, вероятно, более правильный:
def index
@users = User.all
respond_with(@users) do |format|
format.json { render :json => @users, :callback => params[:callback]}
end
end
Я рассмотрел несколько способов решения этой проблемы, но я не могу понять, как заставить их работать:
render
( возможно, в контроллере приложения), чтобы он принимал параметр : jsonp
, который автоматически включает параметр : callback => params [: callback]
. Таким образом я мог бы изменить приведенный выше код на следующий, который несколько короче: def index
@users = User.all
respond_with(@users) do |format|
format.json { render :jsonp => @users}
end
end
to_json
, чтобы решить мою проблему. Таким образом, я мог пропустить блок и просто позвонить response_with (@users,: responseder => 'MyResponder')
, чтобы решить проблему. Или, возможно, я мог бы включить этот код в ответчик приложения, используя гем респондеров plataformatec , чтобы было достаточно response_with (@users)
.