Rails: рендеринг не работает, по-прежнему появляется `Template is missing`
В настоящее время я изучаю Rails Guides. Я прошел через шаги, но все же столкнулся с ошибкой.
Моя версия Ruby ruby 2.1.1p76
, а версия Rails 4.0.4
.
В качестве ориентира я создал Article Controller
.
class ArticlesController < ApplicationController
def new
end
def create
render plain: params[:article].inspect
end
end
Я должен получить {"title"=>"First article!", "text"=>"This is my first article."}
, но результат оказался
Template is missing
Missing template articles/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}.`
Вот мои связанные маршруты:
articles GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
Обновление: render plain:
- новый метод, введенный в Rails 4.1.0
, относящийся к этой проблеме.
Ответы
Ответ 1
В методе render
в Rails 4.1
была добавлена опция plain
, и вы используете Rails 4.0.4
. Таким образом, rails проигнорировала эту опцию и начала искать шаблон с именем articles/create
, поскольку вы находитесь в действии ArticlesController#create
. Очевидно, что шаблон не существует, поэтому вы получаете ошибку Template is missing
.
Обратите внимание на обсуждение этой темы в Github: введите render :plain
и render :html
, сделайте render :body
как псевдоним render :text
Теперь, для использования приведенного ниже синтаксиса вам необходимо обновить до Rails 4.1
:
render plain: params[:article].inspect
С текущей версией Rails 4.0.4
вы можете выбрать:
render text: params[:article].inspect
Ответ 2
Если вы хотите увидеть текстовую информацию параметров [: article] на своей странице, вы можете использовать render text
попробуйте это
class ArticlesController < ApplicationController
def new
end
def create
render text: params[:article].inspect
end
end
Вы получите
{"title"=>"First article!", "text"=>"This is my first article."}
# i.e. your params(whatever params hash contains)
Ответ 3
Вы не нуждаетесь в шаблоне, потому что вы можете использовать рендеринг ничего: true
Попробуйте вот так:
class ArticlesController < ApplicationController
def new
end
def create
params[:article].inspect
render nothing: true
end
end
Пожалуйста, обратитесь к этой ссылке нажмите здесь
Ответ 4
Вы можете прочитать следующую документацию.
Рендеринг чистого текста наиболее полезен, когда вы отвечаете на Ajax или запросы веб-сервисов, ожидающие чего-то другого, кроме HTML.
Ответ 5
Изменить версию Rails в Gemfile:
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.1.6'
Затем запустите:
bundle install
Убедитесь, что версия Rails теперь > 4.1