gpt4 book ai didi

ruby-on-rails - 参数超出范围 Rails 4 和 bootstrap3-datetimepicker-rails

转载 作者:数据小太阳 更新时间:2023-10-29 06:35:39 26 4
gpt4 key购买 nike

我正在使用 bootstrap3-datetimepicker-rails gem 允许用户在我的应用程序中存储 WorkOrderscheduled_date(“DateTime”属性),但我得到一个 argument out of range 错误,当用户提交表单以创建 WorkOrder 时,日期与用户弹出编辑屏幕时选择的日期有很大不同。有趣的是它曾经可以工作,但我不知道可以更改什么代码来破坏它。

我添加了所需的依赖项并在我的 CSS/JS 文件中包含了正确的指令:

gem 'momentjs-rails', '~> 2.5.0'
gem 'bootstrap3-datetimepicker-rails', '~> 3.0.0'

据我所知,我的代码看起来与文档中的示例相同。这是我的表单的片段:

  <div class="row">
<div class="col-md-4">
<div class="form-group">
<%= f.label :scheduled_date %>
<div class='input-group date'>
<span class="input-group-addon"><span class="fa fa-calendar"></span></span>
<%= f.text_field :scheduled_date, class: 'form-control input-lg', id: "service_date_picker" %>
</div>
</div>
</div>
</div>


<script type="text/javascript">
$(function () {
$('#service_date_picker').datetimepicker({
icons: {
time: "fa fa-clock-o",
date: "fa fa-calendar",
up: "fa fa-arrow-up",
down: "fa fa-arrow-down"
}
});
});
</script>

编辑(忘记添加 Controller 代码 - super 简单):

work_orders_controller.rb

def create
@work_order = WorkOrder.new(work_order_params)

... [it errors on the line above]
end

还有我的参数白名单:

def work_order_params
params.require(:work_order).permit(:caller_name, :brief_job_details, :contract_price, :quoted_by, :job_description, :scheduled_date, :time_materials_details, :sheduled_time, :contact_name, :payment_method, :notes, :customer_id, :job_site_id)
end

以及在我保存表单时给出 argument out of range 错误的参数示例:

work_orders_attributes"=>{"0"=>{"caller_name"=>"Justin", "time_materials_details"=>"", "contract_price"=>"", "quoted_by"=>"", "payment_method"=>"", "job_description"=>"", "scheduled_date"=>"05/23/2014 1:28 PM", "notes"=>""}}

与我的 customers_controller.rb 相同,我在新客户表单中有一个 WorkOrder 的嵌套表单(该表单上的其他所有内容都可以正常工作):

def create
@customer = Customer.new(customer_params)

... [errors above]
end

如果日期和时间在现在的 24 小时内,则日期和时间会正确保存,但即使保存正确,当我去编辑该 WorkOrder 时,日期在文本字段中显示完全奇怪且未格式化.例如:

当我从日期选择器中选择日期时:05/06/2014 10:28 AM

当我编辑 WorkOrder 时:2014-06-05 10:28:00.000000

有什么想法吗?我是否应该将该字段设为 DateTimeDateTime(当前)?目前,我们在中部时区工作,但情况并非总是如此。

提前感谢您为我指明正确的方向!

最佳答案

@Uri Agassi 是对的:这是您为创建此处最相关的 WorkOrder 而传递的值。

尝试使用 custom date formatting optionsbootstrap-datepicker 提供给您。如果您可以获得一种看起来不错且易于在后端解析的格式,那么您将希望在该参数进入模型进行验证之前拦截该参数。

无论您将在客户端使用什么日期格式,您仍然希望将其解析为可用的 DateDateTime 对象服务器-在你的 Controller 中。 Check out DateTime#strptime .您还可以在 Date 上调用 #strptime

未经测试,但想法是存在的:

def create
order_params = work_order_params
order_params[:scheduled_date] = Date.strptime(order_params[:scheduled_date],
'%m/%d/%Y %I:%M %p')
@work_order = WorkOrder.new(order_params)
end

关于ruby-on-rails - 参数超出范围 Rails 4 和 bootstrap3-datetimepicker-rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23498845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com