【问题标题】:Rails form_for does not do anythingRails form_for 不做任何事情
【发布时间】:2014-05-18 06:27:43
【问题描述】:

我对 Ruby 2.0 和 rails 4.0 有疑问。

我有一个 form_for 创建一个新的“项目”条目,其中包含标题、描述和状态。 表单本身曾经像一个魅力一样工作,直到我做了一些事情而我不知道是什么。问题是,表单呈现完美,但在向其添加 VALID 值并按下提交按钮后它什么也不做。如果我在输入值并提交之前刷新表单,则 url 将更改为:

projects/new?utf8=✓&authenticity_token=Xh6ZGV2vvth1RzhBk3g5zonms%2Fdq3yzaJtzxDU%2FFBiM%3D&project%5Btitle%5D=Project+title&project%5Bdescription%5D=description&project%5Bstatus%5D=Ongoing&commit=提交

奇怪的是,如果我在同一个文件中的第一个表单之后添加另一个完全相同的表单,那么第二个表单可以完美运行。

我的项目 new.html.erb

<h1>Create a new project</h1>
<div class="row">
  <div class="col-md-5">
    <%= form_for @project do |f| %>
        <%= f.label :title %>
      <%= f.text_field :title %>
      <%= f.label :description %>
      <%= f.text_field :description %>
      <%= f.label :status %>
      <%= f.select :status, [['Ongoing', 'Ongoing'],['Suspended','Suspended'],['Finished','Finished']] %>
      <%= f.submit "Submit" %>
    <% end %>
  </div>
</div>

projects_controller.erb

  def new
      @project = Project.new
  end

  def create
    @project = Project.new(project_params)
    if @project.save
      flash[:success] = "Project successfully created!"
      redirect_to root_path
    else
      render 'new'
    end
  end

  private

  def project_params
    params.require(:project).permit(:title, :description, :status)
  end

正如我所说,它以前可以正常工作。 我也试过禁用 JS,但它仍然没有工作。 如果您对问题可能出在哪里有任何想法,请告诉我。谢谢。

编辑:

从 new.html.erb 生成的 HTML

<div class="container">

      <h1>Create a new project</h1>
<div class="row">
  <div class="col-md-5">
    <form accept-charset="UTF-8" action="/projects" class="new_project" id="new_project" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="Xh6ZGV2vvth1RzhBk3g5zonms/dq3yzaJtzxDU/FBiM=" /></div>
      <label for="project_title">Title</label>
      <input id="project_title" name="project[title]" type="text" />
      <label for="project_description">Description</label>
      <input id="project_description" name="project[description]" type="text" />
      <label for="project_status">Status</label>
      <select id="project_status" name="project[status]"><option value="Ongoing">Ongoing</option>
<option value="Suspended">Suspended</option>
<option value="Finished">Finished</option></select>
      <input name="commit" type="submit" value="Submit" />
</form>  </div>
</div>

    </div>

提交表单后添加日志:

Started GET "/projects/new?utf8=%E2%9C%93&authenticity_token=Xh6ZGV2vvth1RzhBk3g5zonms%2Fdq3yzaJtzxDU%2FFBiM%3D&project%5Btitle%5D=Project+title&project%5Bdescription%5D=description+of+the+project&project%5Bstatus%5D=Ongoing&commit=Submit" for 127.0.0.1 at 2014-05-17 20:44:39 +0100
Processing by ProjectsController#new as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Xh6ZGV2vvth1RzhBk3g5zonms/dq3yzaJtzxDU/FBiM=", "project"=>{"title"=>"Project title", "description"=>"description of the project", "status"=>"Ongoing"}, "commit"=>"Submit"}
  Rendered projects/new.html.erb within layouts/application (2.3ms)
  Rendered layouts/_header.html.erb (0.2ms)
  Rendered shared/_flash_messages.html.erb (0.1ms)
Completed 200 OK in 12ms (Views: 10.9ms | ActiveRecord: 0.0ms)


Started GET "/assets/custom.css?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/rails_bootstrap_forms.css?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/project.css?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/bootstrap.css?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/bootstrap.min.css?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/projects.css?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/jquery.turbolinks.js?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/bootstrap.js?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/bootstrap.min.js?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/project.js?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/projects.js?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/turbolinks.js?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100


Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2014-05-17 20:44:39 +0100

【问题讨论】:

  • 你能粘贴第一个代码sn-p生成的HTML吗?
  • 您的请求是在获取请求中发送数据,您可以将表单标签生成的html粘贴到这里吗?
  • 添加了由 new.html.erb 生成的 HTML
  • 提交表单后发布您的log
  • 你能分享来自routes.rbprojects路由吗?

标签: ruby-on-rails forms


【解决方案1】:

我相信这不是来自 Rails,可能是您的浏览器的扩展,例如开发人员工具,或者可能是您的 Web 服务器的配置

  1. 尝试使用其他浏览器访问您的表单,最好是没有扩展名或扩展名很少的浏览器
  2. 如果它不起作用,请使用 firebug 并在 Net 选项卡中查看您是否在提交后从 POST 重定向到 GET 请求
  3. 使用其他网络服务器,切换到 webrick、thin、puma 或其他任何服务器并检查

【讨论】:

  • 出于好奇,问题的根源是什么?
  • 长话短说:使用您的建议在 Rails 之外寻找问题,因此尝试了不同的浏览器,Web 服务器仍然出现相同的错误,因此将 db 更改为 sqlite 并更改为 mysql 并且它们都正常工作很好,比移回 postgresql 并且问题消失了。奇怪的事情发生了。
  • 确实发生了奇怪的事情:)
猜你喜欢
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多