所以我在我看来有一个表格..
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
属性都返回空值。我相信它与文本区域有关,因为使用普通输入字段可以使它起作用。出了什么问题,我该如何解决?
最佳答案
很难想出解决方案,因为这似乎是一个非常定位的问题。所以这里只是我建议采取的一些步骤来确定它,而不是速记解决方案:
当您在包含表单的实际页面上时,在浏览器控制台中检查
$('#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 上。发送请求时,请检查开发人员工具中的“网络”选项卡:您的 header 中应包含
FormData
,您应该会在其中看到activity_comment[comment]
和你的文本区域值。如果你不这样做,很可能你正在运行一个损坏的 jQuery 版本或者你的浏览器有问题/你使用的是一个损坏的版本,尽管除非你在一些金丝雀上/Chromium 或其他东西的 Alpha 构建 channel 。如果您的 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 没有,则有两种可能性:- 要么你的应用程序中有一些乱七八糟的参数,这意味着你必须检查你的
中的任何
或其params.require
或params.permit
ActivityCommentsController祖先
中的任何 Rails
Rack
/ActionController
接口(interface)中某处存在错误,尽管这也不太可能。在这种情况下尝试将 Rails 更新到最新的补丁版本,或者尝试在 github 上的Rails
问题中搜索ActionController
错误。
Controller
- 要么你的应用程序中有一些乱七八糟的参数,这意味着你必须检查你的
关于html - Textarea 不通过表单发送值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20435903/