我有三个字段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
答案 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