【问题标题】:Using form_for -> no data received (Chrome), dropped connection (Safari)使用 form_for -> 未收到数据 (Chrome),断开连接 (Safari)
【发布时间】: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 =&gt; 'create')。不用说,这些拼命的努力并没有解决问题。

我花了很多令人尴尬的时间试图弄清楚这一点。我将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    在你的路线中你可以写

    resources :demo
    

    然后简单地在你的视图中使用它

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

    附:如果不是单一资源,你应该在控制器、视图和路由中将 Demo 的名称更改为 Demos

    【讨论】:

      猜你喜欢
      • 2019-12-28
      • 2016-05-08
      • 2018-02-09
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 2017-04-30
      相关资源
      最近更新 更多