【发布时间】:2016-01-15 20:52:45
【问题描述】:
我正在努力学习如何使用“form_for”助手。我在http://localhost:3000/demo/new 上显示了一个超级简单的表格。然后我填写了三个 text_fields 并尝试创建一条新记录。在 Chrome 中我收到“未收到数据”错误,在 Safari 中我收到“服务器意外断开连接”错误。
我知道表单正在传递参数,因为对raise parameters.inspect 的调用表明我的参数正在传递。但是,当我运行该方法时,我得到了上述错误。 (顺便说一句,数据被保存到数据库中,这使得这个错误更加令人困惑。事实上,数据被保存了多次(准确地说是 7 次),这表明我处于某种循环中。)
这是我的控制器:
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”的错误。出于同样的原因,我在create_path 语句中添加了(:action => 'create')。不用说,这些拼命的努力并没有解决问题。
我花了很多令人尴尬的时间试图弄清楚这一点。我将不胜感激。
【问题讨论】:
标签: ruby-on-rails-4 routes form-for strong-parameters