Предположим, вы находитесь в своем контроллере пользователей и хотите получить ответ json для запроса на показ. Было бы неплохо, если бы вы могли создать файл в своем каталоге views / users / с именем show.json и после того, как ваши пользователи # show действие завершено, он отображает файл.
В настоящее время вам нужно сделать что-то вроде:
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json{
render :json => @user.to_json
}
end
end
Но было бы неплохо, если бы вы могли просто создать файл show.json, который автоматически отрисовывается так:
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json
end
end
Это спасло бы меня от горя и смыло бы то ужасное грязное чувство, которое я испытываю, когда рендерю свой json в контроллере.
format.json
сshow.json.erb
файлом. Смотрите мой ответ.Ответы:
Вы должны иметь возможность сделать что-то подобное в своем
respond_to
блоке:который отобразит шаблон в формате
app/views/users/_show.json.erb
.источник
Попробуйте добавить представление
users/show.json.erb
Это должно отображаться, когда вы делаете запрос для формата JSON, и вы получаете дополнительное преимущество, заключающееся в том, что он также отображается с помощью erb, поэтому ваш файл может выглядеть примерно такисточник
@user.first_name.to_json
вместоescape_javascript
. Есть некоторые тонкие различия между тем, что позволяет JS, и тем, что является строго JSON. (И эти различия становятся важными, поскольку браузеры реализуют свои собственные парсеры JSON.)<%= xyz.to_json %>
иначе у вас останутся лишние кавычки.Как уже упоминали другие, вам нужно представление users / show.json, но есть варианты, которые следует учитывать для языка шаблонов ...
Еврорадио
Работает "из коробки". Отлично подходит для HTML, но вы быстро обнаружите, что это ужасно для JSON.
RABL
Хорошее решение. Придется добавить зависимость и изучить ее DSL.
Конструктор JSON
То же, что и RABL: Хорошее решение. Придется добавить зависимость и изучить ее DSL.
Обычный рубин
Ruby отлично умеет генерировать JSON, и здесь нет ничего нового, чему можно было бы научиться, поскольку вы можете вызывать
to_json
Hash или объект AR. Просто зарегистрируйте расширение .rb для шаблонов (в инициализаторе):Затем создайте представление users / show.json.rb:
Для получения дополнительной информации об этом подходе см. Http://railscasts.com/episodes/379-template-handlers.
источник
RABL, вероятно, лучшее решение, которое я видел, если вы ищете более чистую альтернативу синтаксису ERb. json_builder и argonaut, которые являются другими решениями, кажутся несколько устаревшими и не будут работать с Rails 3.1 без исправлений.
RABL доступен через гем или в репозитории GitHub; хорошие примеры тоже
https://github.com/nesquena/rabl
источник
Просто чтобы обновить этот ответ для других, которые случайно окажутся на этой странице.
В Rails 3 вам просто нужно создать файл по адресу
views/users/show.json.erb
.@user
Объект будет доступен к просмотру (так же , как это было бы для HTML.) Вы даже не нужноto_json
больше.Подводя итог, это просто
и
источник
respond_with @user, only: [:name]
. Обратитесь к этому руководству для получения дополнительной информации.Просто добавьте
show.json.erb
файл с содержимымИногда это полезно, когда вам нужны дополнительные вспомогательные методы, которые недоступны в контроллере, то есть
image_path(@user.avatar)
что-то для создания дополнительных свойств в JSON:источник
<%= raw(@user.to_json) %>
чтобы избежать экранирования HTML. Что я делаю, так это то, что я полагаюсь на to_json до тех пор, пока он дает мне то, что я хочу, но когда я хочу сделать что-то еще, я шаблонизирую его с тем, что обычно является файлом{ :blah => @user.the_blah }.to_json
.Это потенциально лучший вариант и быстрее, чем ERB: https://github.com/dewski/json_builder
источник
Я новичок в RoR, вот что я узнал. вы можете напрямую отображать формат json
источник