所以我的观点中有一个表格..
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>
然而,我在控制器中收到的参数是......
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
属性无论如何都返回空。我相信它与textarea有关,因为使用普通输入字段使其工作。有什么问题,我该如何解决?
答案 0 :(得分:1)
提出解决方案很难,因为这似乎是一个非常有问题的问题。所以这里只是我建议采取的一些步骤,以解决它,而不是一个简写的解决方案:
当您在包含表单的实际页面上时,请检查浏览器控制台中$('#new_activity_comment').serializeArray()
的输出。
这是处理data-remote="true"
中jquery-rails
表单的js在将表单数据发送到服务器之前序列化表单数据的方法。
生成的Javascript Array
应该包含名称为"activity_comment[comment]"
且值为"Your comment"
的对象。
如果没有,则您的错误来自Javascript或HTML中的某个位置。除非你发布JS来源,你的HTML Doctype
等
编辑: 1.5。从textarea中删除"form-control"
类,看看它是否解决了您的问题。如果没有,请尝试撕掉来自Bootstrap的所有JS,并检查您的表单现在是否正常。如果是,问题在于Bootstrap。
发送请求时,请检查开发者工具中的“投放网络”标签:标题中应包含FormData
,您应该看到activity_comment[comment]
和textarea值。如果你不这样做,很可能你正在运行一个破坏的jQuery版本或你的浏览器出错的东西/你正在使用它的破坏版本,尽管除非你在某些Canary /上这是非常不可能的用于Chromium的Alpha Build通道。
如果您的Javascript和浏览器正在发送表单,并且您仍然没有在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没有,则有两种可能:
params.require
中的任何params.permit
或ActivityCommentsController
或Controller
中的ancestors
它的Rails
Rack
ActionController
/ ActionController
界面中存在某个错误,但这种情况也不太可能发生。在这种情况下尝试将rails更新为最新的补丁版本,或尝试在github上的Rails
问题中搜索{{1}}错误。答案 1 :(得分:0)
您确定了解form_for remote :true
的作用吗?它将您的表单转换为ajax加载程序。所以,如果这表现得很好,那么一些javascript就应该受到指责。在Chrome中查看你的javascript控制台以获取线索。
答案 2 :(得分:0)
也许尝试将attr_accessable :comment
添加到您的模型