Подтвердить что ты не робот

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, относящийся к этой проблеме.

4b9b3361

Ответ 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