没有路线匹配[POST]“/ tv_series / new”

时间:2015-11-04 12:46:33

标签: ruby-on-rails ruby ruby-on-rails-3

当我显示表单时,我输入一些东西,然后我希望它进入索引视图

_form.html.erb

<%= simple_form_for @series, :url => { :action => :new } do |f| %>
  <%= f.input :title, label: "Series Title" %>
  <%= f.input :description %>
  <%= f.input :actor %>
  <%= f.button :submit %>
<% end %>

有人可以帮我识别一下我的错误吗?我不知道为什么在我尝试创建时没有创建tvseries,当我检查tvseries.connection时,它说nil,没有任何内容。

tv_series_controller.rb

 class TvSeriesController < ApplicationController
   def index
   end

   def new
     @series = Series.new
   end

   def create
     @series = Series.new(serie_params)
     if @series.save
       redirect_to root_path
     else
       render 'new'
     end
   end

   private
     def show
       params.require(:series).permit(:title, :description,:actor)
     end
 end

new.html.erb

<h1>New Serie</h1>

<%= render 'form' %>

的routes.rb

Rails.application.routes.draw do
  resources :tv_series
  root 'tv_series#index'
end

_create_series.rb

class CreateSeries < ActiveRecord::Migration
  def change
    create_table :series do |t|
      t.string :title
      t.text :description
      t.string :actor
      t.timestamps null: false
    end
  end
end

3 个答案:

答案 0 :(得分:4)

删除, :url => { :action => :new },你应该好好去。

这是因为没有匹配POST /tv_series/new的路线。相反,让Rails通过删除上面的行找出路线,它将使用POST /tv_series

如果您运行rake routes,您应该能够看到所有可用的路由以及相应的HTTP动词(GET,POST,PATCH等)

在旁注中,我认为您的私有方法名称不正确。看起来你有def show,当你想要的是def serie_params时。

答案 1 :(得分:0)

rake routes 运行到控制台,您将获得HTTP动词的不同路径(GET,POST,PUT / PATCH,DELETE)

相应地使用路径。

在您创建tv_series的情况下,您必须使用post HTTP动词。 替换:url =&gt; {:action =&gt; :new},为POST HTTP谓词提供了创建操作路径。它会正常工作。

请参阅此链接:http://guides.rubyonrails.org/routing.html

答案 2 :(得分:0)

对于rails 4,默认情况下它具有相同的控制器,型号和视图名称。在此上下文中,您具有不同的模型名称和控制器/视图。因此,您必须在表单中确定您的网址:

<%= simple_form_for @series, :url => { :controller => :tv_series, :action => :create }, :method => :post do |f| %>

<%= simple_form_for @series, :url => tv_series_path, :method => :post do |f| %>

我希望这对你有所帮助。