【问题标题】:Set both end_ and start_time in form with datetime_select使用 datetime_select 在表单中设置 end_ 和 start_time
【发布时间】:2017-08-14 20:24:17
【问题描述】:

我正在尝试设置一个预订表单,人们可以在其中预订服务。在服务模型中有一个持续时间集,我想用它来自动填充 end_time。例如,如果我在 2017 年 3 月 22 日下午 1 点预订了 60 分钟的服务,我希望将结束时间设置在同一天但一小时后。可以用表格寄过来吗?

<%= form_for([service, service.bookings.new]) do |f| %>
  <div class="row">
    <div class="col-sm-12">
      <%= hidden_field_tag "recipients", @user.id %>
      <div class="form-group">
        <%= label_tag 'Available times' %>
        <%= f.datetime_select :start %>
        <%= f.hidden_field :end, value: Time.at([:start].to_i + service.duration) %>
        <%= f.hidden_field :service_id, value: service.id %>
        <%= f.hidden_field :price, value: service.price %>
      </div>
      <%= submit_tag 'Book', class: 'btn btn-complete btn-lg btn-large btn-block' %>
    </div>
  </div>
<% end %>

我已经尝试过上面但得到

[:start]:Array 的未定义方法 `to_i'

我猜是因为 :start 尚未保存并呈现 nil。

关于如何解决这个问题的任何想法?

非常感谢

【问题讨论】:

    标签: ruby-on-rails ruby forms ruby-on-rails-5


    【解决方案1】:

    [:start] 只是返回一个包含符号的数组,你什么也得不到。

    当你得到 start_time 时,你应该在控制器或模型中创建 end_time,或者在表单中输入 start_time 时使用 javascript 代码获取 end_time

    【讨论】:

    • 谢谢。关于如何在控制器中正确创建 end_time 的任何想法?由于上述评论中所述的原因,以下代码不起作用。 booking_params[:end] = Time.at(booking_params[:start].to_i + Service.find(booking_params[:service_id]).duration)
    【解决方案2】:

    考虑不在视图中执行业务逻辑。发送这些参数并在模型或控制器中设置结束变量。

    为什么您的代码不起作用? datetime_selectreturns a set of select tags (one for year, month, day, hour, and minute).

    【讨论】:

    • 非常感谢,这完全有道理。既然我得到了一堆选择标签,你知道如何在控制器中解决这个问题吗?下面的代码显然不起作用booking_params[:end] = Time.at(booking_params[:start].to_i + Service.find(booking_params[:service_id]).duration) 然后调用create @booking = current_user.bookings.create(booking_params)
    猜你喜欢
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    相关资源
    最近更新 更多