2017-01-02 3 views
0

Я делаю это в Ruby on Rails, как в официальном руководстве. Я создал модель Post, я сделал form_for в приложение/просмотров/new.html.erb как этотActionController :: UrlGenerationError в блоге # новый

<%= form_for :blog, url: blog_path do |f| %> 
    <p> 
    <%= f.label :title %> 
    <%= f.text_field :title %> 
    #some other stuff 
    <%= f.submit %> 
<% end %> 

но Im reciving ошибки

ActionController::UrlGenerationError in Blog#new 

Showing <some folders>/hello_world/app/views/blog/new.html.erb where line #1 raised: 
No route matches {:action=>"show", :controller=>"blog"} missing required keys: [:id] 
Extracted source (around line #1): 
<%= form_for :blog, url: blog_path do |f| %> 

Я не знаю, почему это происходит, bacause моего маршруты выглядят правильно для меня. Мои маршруты файл:

Rails.application.routes.draw do 
    resources :users 
    resources :blog 
end 

Это мой blog_controller:

class BlogController < ApplicationController 
    def index 
    @posts = Post.all 
    end 

    def new 
    end 

    private 
    def post_params 
     params.require(:blog).permit(:title, :text) 
    end 
end 

я добавил

def create 
    @post = Post.new(post_params) 
    if @post.save 
     redirect_to @post 
    else 
     render 'new' 
    end 
    end 

, но это не помогло

Ошибка не отображается, когда я удалить url из form_for ("url: blog_path"), но очевидно, что он не работает, потому что или формирует цель. У меня есть другие файлы в проекте, но я думаю, что они не важны для этой проблемы.

ответ

0

Измените новый код метода в контроллере следующим

def new 
    @blog = Blog.new 
end 

, а затем изменить форму следующим образом

<%= form_for @blog, url: {action: "create"} do |f| %> 
    <p> 
    <%= f.label :title %> 
    <%= f.text_field :title %> 
    #some other stuff 
    <%= f.submit %> 
<% end %> 

или просто вы можете создать объект в самой форме

<%= form_for Blog.new do, url: {action: "create"} |f| %> 
    <p> 
    <%= f.label :title %> 
    <%= f.text_field :title %> 
    #some other stuff 
    <%= f.submit %> 
<% end %> 

Надеюсь, это вам поможет.

+0

Это помогло раздельно. У меня больше не было ошибок, но мой post_params private mothod вызывает ошибку. Я скопировал код из рабочего приложения для блога, но все-таки я получил ошибку, поэтому я удалил проект и создал новый. – AbUndZu

+0

Если возможно, пожалуйста, поделитесь этой ошибкой здесь –

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