使用form_for - >未收到任何数据(Chrome),已断开连接(Safari)

时间:2015-10-17 01:16:59

标签: ruby-on-rails-4 routes form-for strong-parameters

我正在试图学习如何使用“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。毋庸置疑,这些绝望的努力并没有解决问题。

我花了很多时间试图解决这个问题。我将不胜感激。

1 个答案:

答案 0 :(得分:0)

在你的路线中你可以写

resources :demo

然后只在视图中使用它

<%= form_for @demo do |f| %>

P.S。你应该在控制器,视图和路线中将Demo的名称更改为Demos,如果它不是一个单一的资源