【问题标题】:Rails inconsistently fails to send datetime parametersRails 不一致地无法发送日期时间参数
【发布时间】:2010-08-18 14:45:37
【问题描述】:

我正在修改其他人的项目,该项目允许用户提交内容以便立即发布或预定发布。有一对单选按钮可以选择它,如果选择了“计划”的单选按钮,则由 javascript 启用一个日期时间字段

<%= f.hidden_field :scheduled_state %>
<%= f.radio_button :immediate_or_scheduled, :immediate, :checked => "checked", :id => "pub_imd" %>

<%= f.radio_button :immediate_or_scheduled, :scheduled , :id => "pub_sch" %>
        <label>Date/Time:</label>

        <%= f.datetime_select :scheduled_start,
                              {:include_blank => false,
                                :default => 3.days.from_now,
                                :start_year => Time.now.year} %>

我并不完全清楚隐藏字段的用途,这是我的下一个调查点。无论如何,问题是提交表单时,有时参数没有提交。我会复制 mongrel 输出,但你看到的只是没有 :scheduled_start(1i) => 2010。它并没有说它是 nil,它只是没有那个参数。

真正让我感到震惊的是,这不是一个一致的问题——我可以在预定日期连续提交 3 次,然后它就会失败。我无法关联具体的日期——有些日期似乎比其他日期更混乱,但没有一个是真正一致的。

我尝试的修复-

  • 原来 :include_blank 是真的,我想也许它没有正确发送。无关紧要。

  • 尝试关闭禁用/启用选择字段的 javascript,但不相关。

  • 尝试用纯 html 对表单进行硬编码,没有任何区别。

  • 尝试为我自己的参数添加自定义 rails select_tags,然后在控制器中选择它们并将它们添加到参数中。仍然没有帮助,并打破了立即发布选项。

我很困惑,如果有人有新的方向,我可以研究一下,那就太好了。 谢谢!

【问题讨论】:

  • 根据日志,浏览器似乎没有将表单字段发送到服务器。你用什么浏览器?如果您使用的是 Firefox,请安装 firebug 并检查发布到服务器的内容(查看 firebug 的 net 选项卡)。是否有任何形式的 onSubmit 处理程序?你也可以发布生成的html吗?

标签: ruby-on-rails ruby datetime parameter-passing form-helpers


【解决方案1】:

没有看到表单顶部,我无法判断您是否使用form_for 语句,但如果没有,您可以将对象添加为第一个参数

f.datetime_select 'post', 'scheduled_start', {options hash here}

这里的api http://apidock.com/rails/ActionView/Helpers/DateHelper/datetime_select

【讨论】:

    【解决方案2】:

    我是原始发帖者,但我无法发表评论,因为我最初是作为未注册用户发布的。如果某个管理员可以发表评论,那就太好了。

    好的,我查看了网络窗格,即使它失败了,它仍然在发送请求中的表单中的参数。我正在使用 form_for 助手。我尝试在控制器中写入一个部分来捕获参数并将它们分配给对象,就像这样

    @scheduled_start_hack = "#{params[:press_release][:"scheduled_start(2i)"]}.#{params[:press_release][:"scheduled_start(3i)"]}.#{params[:press_release][:"scheduled_start(1i)"]} - #{params[:press_release][:"scheduled_start(4i)"]}:#{params[:press_release][:"scheduled_start(5i)"]}#{@meridian}"
    
    @press_release = PressRelease.new(params[:press_release])
    
    @press_release.scheduled_start = @scheduled_start_hack
    

    那个 sn-p 有一堆我懒得发帖的条件,所以它不会这样做,以防万一事情未定义或它不应该是预定的开始或正确格式化等。我让它输出格式正确的@scheduled_start_hack,但它仍然拒绝@press_release.save,因为它像以前一样说“计划开始不能为空白”。

    我肯定注意到该错误主要发生在生产中。本地开发失败已经很久了,生产成功也很久了。

    感谢您的所有回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      相关资源
      最近更新 更多