Html Textarea未通过表单发送值

Html Textarea未通过表单发送值,html,ruby-on-rails,ruby,ruby-on-rails-4,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, cl

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

  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>
活动评论模型

# == 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
#==架构信息
#
#表名称:活动注释
#
#id:整数不为空,主键
#用户id:integer
#klass_名称:字符串(255)
#klass_id:integer
#注释:文本
#创建时间:datetime
#更新时间:datetime
类ActivityComment

无论发生什么情况,
comment
属性都返回空。我相信它与文本区有关,因为使用普通输入字段使其工作。出了什么问题以及如何修复它?

您确定您了解
form\u for remote:true
的功能吗?它将表单转换为ajax加载程序。因此,如果这是错误的,那么应该归咎于某些javascript。查看chrome中的javascript控制台以获得线索。

也许可以尝试向模型添加
attr\u accessible:comment

很难找到解决方案,因为这似乎是一个非常棘手的问题。因此,以下是我建议采取的一些步骤,而不是一个速记解决方案:

  • 当您处于包含表单的实际页面上时,请在浏览器控制台中检查
    $('#新建活动\u注释').serializeArray()
    的输出

    这就是js在处理
    jqueryrails
    中的
    dataremote=“true”
    表单时,在将表单数据发送到服务器之前序列化表单数据所做的

    生成的Javascript
    数组
    中应该有一个名为“activity\u comment[comment]”且值为“Your comment”
    的对象

    如果没有,则错误来自Javascript或HTML中的某个地方。在哪里很难说,除非你发布JS源代码,你的
    HTMLdoctype
    等等

    编辑:1.5。从文本区域中删除
    “表单控件”
    类,看看它是否解决了您的问题。如果没有,请尝试删除来自引导的所有JS,并检查您的表单现在是否正常。如果是,问题在于引导

  • 发送请求时,请检查开发人员工具中的“网络”选项卡:标题中应包含
    FormData
    ,在那里您应该可以看到
    activity\u comment[comment]
    和文本区域值。如果您不这样做,那么很可能您正在使用一个坏掉的jQuery构建,或者您的浏览器有问题/您正在使用一个坏掉的jQuery构建,尽管这是非常不可能的,除非您使用的是Chromium或其他东西的某个Canary/Alpha构建通道

  • 如果您的Javascript和浏览器正在发送表单ok,但rails控制器中仍然没有textarea值,请将原始机架参数的内容记录到rails日志中:

    Rails.logger.info '###' #makes it easier to find your params
    Rails.logger.info URI.decode(request.env["rack.request.form_vars"])
    
    现在,如果
    Rack
    具有正确的表单值,但rails没有,则有两种可能性:

  • 要么你的应用程序中有一些参数很强的问题,这意味着你必须在你的
    ActivityCommentsController
    或它的
    祖先中检查任何
    参数require
    参数permit
  • Rails
    Rack
    /
    ActionController
    界面的某个地方有一个bug,尽管这也不太可能。在这种情况下,请尝试将rails更新到最新的补丁版本,或者尝试在github上的
    rails
    问题中搜索
    ActionController
    bug

  • 当您在HTTP请求到达控制器之前检查它时,它是如何发送的?我相信是POST请求。但我需要仔细检查一下。检查请求是否包含发送到控制器时来自textarea的表单数据。在Chrome中,您可以通过单击POST请求并查找表单数据,在“网络”选项卡下检入开发人员工具。查看原始请求可能会有更多帮助。看起来是这样的:这是一个POST请求。看来评论还没有通过。它是唯一没有值的字段。是的,我知道remote true的作用。我已经查看了我的javascript控制台,它告诉我数据已经发送,除了文本区域。正如我在问题中提到的,将文本区域更改为文本字段可以解决问题,但我需要将其设置为文本区域。感谢您的综合帖子。以下是结果。表单数据显示在标题中,我确实看到了
    activity\u comment[comment]
    ,但是它的值为空。我删除了引导代码和任何其他第三方库,但是错误仍然存在。至于jQuery版本,我有
    1.10.2
    。最后,我在Mac上的Chrome和Ubuntu上的Chrome上进行了测试。@jason328 Ok,
    $(“#new_activity_comment”)的输出是什么。serializeArray()
    -里面有你的textarea数据吗?我实际上已经修复了它。序列化数组返回了适当的信息。问题是我的js在提交之前修改了文本区域。感谢您的深入帮助。
    Rails.logger.info '###' #makes it easier to find your params
    Rails.logger.info URI.decode(request.env["rack.request.form_vars"])