2016-02-11 3 views
0

Я следую руководству по рельсам и нуждаюсь в некоторой помощи для продолжения. Проблема в том, что как только я заполню форму, в которой есть заголовок, поля тела и нажмите submit, он должен перенаправить на страницу show.html.erb, вместо этого он выдает ошибку.action create не удалось найти для PostsController

Ошибка: Действие 'создать' не может быть найдено для PostsController

routes.rb

Rails.application.routes.draw do 

    get "/pages/about" => "pages#about" 
    get "/pages/contact" => "pages#contact" 

    get "/posts" => "posts#index" 
    post "/posts" => "posts#create" 

    get "/posts/show" => "posts#show", as: :show 
    get "/posts/new" => "posts#new" 


end 

posts_controller_tests.rb

require 'test_helper' 

class PostsControllerTest < ActionController::TestCase 
    def index 

    end 

    def new 
     @post = Post.new 
    end 

    def create 
     @post = Post.new(post_params) 
     @post.save 
     redirect_to show_path 
    end 

    def show 

    end 

    private 

    def post_params 
     params.require(:post).permit(:title, :body) 
    end 
end 

новый. html.erb

<h1>Create a new blog post</h1> 

<div class="form"> 

<%= form_for Post.new do |f| %> 
    <%= f.label :title %>: <br> 
    <%= f.text_field :title %> <br> <br> 

    <%= f.label :body %>: <br> 
    <%= f.text_area :body %> <br> <br> 

    <%= f.submit %> 

<% end %> 

</div> 

Любая помощь по этому вопросу будут оценены.

+0

Можете ли вы добавить форму на вопрос, будет полезно –

+0

Пожалуйста отправьте сообщение об ошибке. – mudasobwa

+0

Отправьте ссылку на учебник, если он онлайн. Может быть полезно. –

ответ

1

Примечание: Вы используете posts_controller_tests.rb не posts_controller.rb. Вы вводите код контроллера в тестовый контроллер.

Попробуйте переместить код в app/controllers/posts_controller.rb:

class PostsController < ApplicationController 
    def index 

    end 

    def new 
    @post = Post.new 
    end 

    def create 
    @post = Post.new(post_params) 
    @post.save 
    redirect_to show_path 
    end 

    def show 

    end 

    private 

    def post_params 
     params.require(:post).permit(:title, :body) 
    end 
end 
+0

Ах! Спасибо, тон. Сейчас он отлично работает – Adam

+0

Добро пожаловать! –

0

Ваш create действие всегда перенаправляет вас на действие шоу. Неважно, была ли ваша модель сохранена или нет.

Вы должны проверить, если модель была сохранена или нет:

def create 
    @post = Post.new(post_params) 

    if @post.save 
    flash[:success] = 'Successfully saved' 
    redirect_to @post 
    else 
    render 'new' 
    end 
end 

Если он не был сохранен, он снова делает новое действие.

0

Измените ваш routes.rb к этому:

Rails.application.routes.draw do 

    get "/pages/about" => "pages#about" 
    get "/pages/contact" => "pages#contact" 

    resources :posts 
end 

Кроме того, вы должны наследовать ваш контроллер от ActionController::Base

так изменить первую строку контроллера

class PostsController < ActionController::Base

и переместить контроллер до app/controllers/posts_controller.rb

Смежные вопросы