【问题标题】:Saving bookings daily instead of deleting em all每天保存预订而不是全部删除
【发布时间】:2017-09-25 23:52:09
【问题描述】:

我创建了一个应用程序,用户可以在其中预订一小时的培训。这是每天的,因此必须每天重置预订;实际上我正在使用 heroku 调度程序,所以每天早上 06:00 都会删除预订。

我不想删除预订,我想将它们保存在数据库中,但我不知道如何应用此逻辑。

我的 scheduler.rake 文件:

desc "This task is called by the Heroku scheduler add-on"
task :reset_bookings => :environment do
  Booking.all.delete_all
end

我想知道如何将用户预订的状态设置为 false,以便我可以再次预订(第二天)

新的预订 html.erb 视图:

<% unless current_user?(@user) %>
<% if current_user.trainings.include?(@training) %>
  <%= link_to "Cancelar reserva",
      training_booking_path(@training, @training.bookings.where(user:
      current_user).first),
      method: :delete, data:{ confirm: 'You sure?' },
      class: "btn btn-primary" %>
  <% end %>
  <% if current_user.trainings.any? %>
    <% else %>
      <%= link_to "Reservar", new_training_booking_path(@training,
      @training.bookings.where(user: current_user).first),
      class: "btn btn-primary" %>
    <% end %>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby time


    【解决方案1】:

    在您的预订表中添加一个布尔列

    add_column :bookings, :deleted, :boolean, default: false
    

    然后为您的预订模型添加范围

    scope :undeleted, -> { where(deleted: false) }
    

    在您的 rake 任务中,而不是只删除记录

    Booking.undeleted.update_all(deleted: true)
    

    其他::

    使用paranoia gem 来帮助你。它使用模型上的默认范围软删除您的记录并返回未删除记录的数据。与上面类似,我认为唯一的优点是它在删除记录时具有时间戳。再次,此功能可以在不使用 gem 的情况下实现。

    希望对你有帮助..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      相关资源
      最近更新 更多