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构建通道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"])