当我显示表单时,我输入一些东西,然后我希望它进入索引视图
_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
答案 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谓词提供了创建操作路径。它会正常工作。
答案 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| %>
我希望这对你有所帮助。