如何在将类发布到数据库rails之前修改它的方法

时间:2014-11-26 07:18:08

标签: ruby-on-rails ruby-on-rails-4

我有三个字段start_time:time,end_time:time和total_min:decimal字段。用户输入start_time和end_time,用于计算在将其保存到数据库之前所花费的总分钟数(sq-lite)。如何在发布之前计算total_min?

    class CreateInternets < ActiveRecord::Migration
      def change
        create_table :internets do |t|
         t.time :start_time
         t.time :end_time
         t.decimal :total_min
         t.timestamps
        end
      end
    end

2 个答案:

答案 0 :(得分:0)

使用ActiveRecord的before_save回调。

before_save :update_total_min

def update_total_min
     total_min = end_time - start_time
end

http://guides.rubyonrails.org/active_record_callbacks.html#callbacks-overview

答案 1 :(得分:0)

您可以使用Time的算术运算。您可以将此行添加到Internet#create操作:

 @internet.total_min = params[:start_time] - params[:end_time] / 60

或使用strong_params

 @internet.total_min = internet_params[:start_time] - internet_params[:end_time] / 60

确保将控制器中的属性列入白名单:

 private
   def internet_params
     params.require(:internet).permit(:start_time, :end_time)
   end