我正在试图学习如何使用“form_for”助手来撕掉我的头发。我在http://localhost:3000/demo/new
上显示一个超级简单的表单。然后我填写三个text_fields并尝试创建一个新记录。在Chrome中我收到“No Data Received”错误,在Safari中我得到“服务器意外断开连接”错误。
我知道表单IS传递参数,因为对raise parameters.inspect
的调用表明我的参数正在传递。但是,当我运行该方法时,我得到上述错误。 (顺便说一句,数据被保存到数据库中,这使得这个错误更加令人困惑。实际上,数据被保存了多次(确切地说是7),这表明我处于某种循环中。)< / p>
这是我的控制器:
class DemoController < ApplicationController
def index
@demos = Demo.all
end
def new
@demo = Demo.new
end
def create
# raise params.inspect
@new_demo = Demo.create(demo_params)
if @new_demo
redirect_to 'index'
else
render 'new'
end
end
private
def demo_params
params.require(:demo).permit(:fname, :lname, :city)
end
end
这是我的观点(使用form_for):
<h1>Demo#new</h1>
<p>Find me in app/views/demo/new.html.erb</p>
<%= form_for @demo, url: create_path(:action => 'create') do |f| %>
<%= f.text_field :fname %>
<%= f.text_field :lname %>
<%= f.text_field :city %>
<%= f.submit "Create" %>
<% end %>
以下是我的路线:
get 'demo/index'
get 'demo/show'
get 'demo/new'
get 'demo/edit'
post '/demo/create'
post '/demo/create' => 'demo#create', as: :create
match ':controller(/:action(/:id))', :via => [:get, :post]
顺便说一句,我改变了两个“/ demo / create”路由(添加正斜杠)只是为了尝试修复问题。因为我也遇到错误导致rails找不到路由“/ demo / create”。出于同样的原因,我在(:action => 'create')
语句中添加了create_path
。毋庸置疑,这些绝望的努力并没有解决问题。
我花了很多时间试图解决这个问题。我将不胜感激。
答案 0 :(得分:0)
在你的路线中你可以写
resources :demo
然后只在视图中使用它
<%= form_for @demo do |f| %>
P.S。你应该在控制器,视图和路线中将Demo的名称更改为Demos,如果它不是一个单一的资源