Textarea不通过表格发送价值

时间:2013-12-07 00:21:23

标签: 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>

然而,我在控制器中收到的参数是......

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有关,因为使用普通输入字段使其工作。有什么问题,我该如何解决?

3 个答案:

答案 0 :(得分:1)

提出解决方案很难,因为这似乎是一个非常有问题的问题。所以这里只是我建议采取的一些步骤,以解决它,而不是一个简写的解决方案:

  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。

  2. 发送请求时,请检查开发者工具中的“投放网络”标签:标题中应包含FormData,您应该看到activity_comment[comment]和textarea值。如果你不这样做,很可能你正在运行一个破坏的jQuery版本或你的浏览器出错的东西/你正在使用它的破坏版本,尽管除非你在某些Canary /上这是非常不可能的用于Chromium的Alpha Build通道。

  3. 如果您的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没有,则有两种可能:

    1. 您的应用中存在一些具有强参数的东西,这意味着您必须检查params.require中的任何params.permitActivityCommentsControllerController中的ancestors它的Rails
    2. Rack ActionController / ActionController界面中存在某个错误,但这种情况也不太可能发生。在这种情况下尝试将rails更新为最新的补丁版本,或尝试在github上的Rails问题中搜索{{1}}错误。

答案 1 :(得分:0)

您确定了解form_for remote :true的作用吗?它将您的表单转换为ajax加载程序。所以,如果这表现得很好,那么一些javascript就应该受到指责。在Chrome中查看你的javascript控制台以获取线索。

答案 2 :(得分:0)

也许尝试将attr_accessable :comment添加到您的模型