html - Textarea 不通过表单发送值

标签 html ruby-on-rails ruby ruby-on-rails-4 textarea

所以我在我看来有一个表格..

  form_for(ActivityComment.new, remote: true, url: "/activity_comments/create", class: "col-md-6") do |f|
    f.hidden_field :klass_name, value: activity.klass
    f.hidden_field :klass_id, value: activity.id
    f.text_area :comment, class: "form-control"
    f.submit "Submit", class: "btn btn-success"
  end

html 打印为...

<form accept-charset="UTF-8" action="/activity_comments/create" class="new_activity_comment" data-remote="true" id="new_activity_comment" method="post">
  <div style="margin:0;padding:0;display:inline">
    <input name="utf8" type="hidden" value="✓">
  </div>
  <input id="activity_comment_klass_name" name="activity_comment[klass_name]" type="hidden" value="Friend">
  <input id="activity_comment_klass_id" name="activity_comment[klass_id]" type="hidden" value="3">
  <textarea class="form-control" id="activity_comment_comment" name="activity_comment[comment]"></textarea>
  <input class="btn btn-success" name="commit" type="submit" value="Submit">
</form>

但是我在 Controller 中收到的参数是...

Parameters: {"utf8"=>"✓", "activity_comment"=>{"klass_name"=>"Friend", "klass_id"=>"3", "comment"=>""}, "commit"=>"Submit"}

事件评论模型

# == Schema Information
#
# Table name: activity_comments
#
#  id         :integer          not null, primary key
#  user_id    :integer
#  klass_name :string(255)
#  klass_id   :integer
#  comment    :text
#  created_at :datetime
#  updated_at :datetime

class ActivityComment < ActiveRecord::Base
  belongs_to :user
end

无论如何,comment 属性都返回空值。我相信它与文本区域有关,因为使用普通输入字段可以使它起作用。出了什么问题,我该如何解决?

最佳答案

很难想出解决方案,因为这似乎是一个非常定位的问题。所以这里只是我建议采取的一些步骤来确定它,而不是速记解决方案:

  1. 当您在包含表单的实际页面上时,在浏览器控制台中检查 $('#new_activity_comment').serializeArray() 的输出。

    这是处理 jquery-rails 中的 data-remote="true" 表单的 js 在将表单数据发送到服务器之前序列化表单数据的方式。

    生成的 Javascript Array 应该有一个名称为 "activity_comment[comment]" 且值为 "Your comment" 的对象。

    如果不是,则错误来自 Javascript 或 HTML 中的某处。除非您发布 JS 源代码、您的 HTML Doctype 等,否则很难说。

    编辑: 1.5。从 textarea 中删除 "form-control" 类,看看它是否解决了您的问题。如果没有,请尝试删除来自 Bootstrap 的所有 JS,并检查您的表单现在是否正常。如果是,则问题出在 Bootstrap 上。

  2. 发送请求时,请检查开发人员工具中的“网络”选项卡:您的 header 中应包含 FormData,您应该会在其中看到 activity_comment[comment]和你的文本区域值。如果你不这样做,很可能你正在运行一个损坏的 jQuery 版本或者你的浏览器有问题/你使用的是一个损坏的版本,尽管除非你在一些金丝雀上/Chromium 或其他东西的 Alpha 构建 channel 。

  3. 如果您的 Javascript 和浏览器发送表单正常,但您的 Rails Controller 中仍然没有文本区域值,请将原始机架参数的内容记录到您的 Rails 日志中:

    Rails.logger.info '###' #makes it easier to find your params
    Rails.logger.info URI.decode(request.env["rack.request.form_vars"])
    

    现在,如果 Rack 具有正确的表单值,但 rails 没有,则有两种可能性:

    1. 要么你的应用程序中有一些乱七八糟的参数,这意味着你必须检查你的 中的任何 params.requireparams.permit ActivityCommentsController 或其祖先
    2. 中的任何Controller
    3. Rails Rack/ActionController 接口(interface)中某处存在错误,尽管这也不太可能。在这种情况下尝试将 Rails 更新到最新的补丁版本,或者尝试在 github 上的 Rails 问题中搜索 ActionController 错误。

关于html - Textarea 不通过表单发送值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20435903/

相关文章:

html - 在没有内容 div 冲突的情况下刷新导航顶部、左侧和右侧

javascript - ionic 形式的键盘事件

html - 下拉样式在 ff 和 IE 中无法正确呈现

ruby-on-rails - 事件存储 : Best practice to retain/cache uploaded file when form redisplays

ruby-on-rails - 同一模型之间的 Ruby 关系

html - 我想在我的母版页中放置一个超大屏幕作为标题

ruby-on-rails - 查找 Rails 应用程序中的内存泄漏

sql - 存储事件/非事件时间戳

ruby-on-rails - 捆绑安装错误 (Linux)

ruby-on-rails - Prawn 网格布局: Dynamic content colliding with subsequent rows