Ruby on rails 在POST/PUT到数据库之前,将时间(MM:SS)转换为浮点(秒)
我希望用户能够选择或输入一个时间(例如:“你早上刷牙花了多长时间?”),在“创建”或“更新”操作中,我希望将时间转换为在发布/放入数据库之前的秒数 我现在有一个模块中的方法(尝试学习如何使用模块),但我不确定它是否适合这种情况 浮动到查看时间(工作) 控制器Ruby on rails 在POST/PUT到数据库之前,将时间(MM:SS)转换为浮点(秒),ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.2,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.2,我希望用户能够选择或输入一个时间(例如:“你早上刷牙花了多长时间?”),在“创建”或“更新”操作中,我希望将时间转换为在发布/放入数据库之前的秒数 我现在有一个模块中的方法(尝试学习如何使用模块),但我不确定它是否适合这种情况 浮动到查看时间(工作) 控制器 def create # "time_to_float" (Convert task_time to seconds float) # Create new task after conversion @task = Task.
def create
# "time_to_float" (Convert task_time to seconds float)
# Create new task after conversion
@task = Task.new(params[:task])
respond_to do |format|
if @task.save
format.html { redirect_to @task, notice: 'Task was successfully created.' }
format.json { render json: @event, status: :created, location: @task }
else
format.html { render action: "new" }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end
如何在post(或put)到db之前进行转换 另外,我应该将这些方法移动到应用程序控制器,还是我的模块可以
--谢谢您的帮助。对我来说,这似乎是模型的工作,而不是控制器的工作。模型应该关注数据的存储方式,并根据需要转换数据类型 由于您试图学习如何使用模块,因此可以将这些方法作为实例方法保留在模块中,并将它们混合到模型类中:
module TimeConversions
def time_to_float(time)
# ...
end
def float_to_time(seconds)
# ...
end
end
class Task
extend TimeConversions
before_save :convert_length
# ...
private
def convert_length
self.length = self.class.time_to_float(length) if length.to_s.include?(':')
end
end
然后您仍然可以在视图中使用float\u to\u time
:
<%= Task.float_to_time(task.length) %>
在保存过滤器之前,您可能会在
中执行更复杂的操作,但这可能会给您一些想法。对我来说,这似乎是模型的工作,而不是控制器的工作。模型应该关注数据的存储方式,并根据需要转换数据类型
由于您试图学习如何使用模块,因此可以将这些方法作为实例方法保留在模块中,并将它们混合到模型类中:
module TimeConversions
def time_to_float(time)
# ...
end
def float_to_time(seconds)
# ...
end
end
class Task
extend TimeConversions
before_save :convert_length
# ...
private
def convert_length
self.length = self.class.time_to_float(length) if length.to_s.include?(':')
end
end
然后您仍然可以在视图中使用float\u to\u time
:
<%= Task.float_to_time(task.length) %>
在保存
过滤器之前,您可能会在中做一些更复杂的事情,但这可能会给您一些想法。我想您正在寻找一个新的解决方案
在这种情况下,您可以有如下内容:
class Task < ActiveRecord::Base
before_save :convert_task_length_to_float
def convert_task_length_to_float
# do the conversion. set `self.task_float =` to update the value that will be saved
end
end
类任务
在将任务
保存到数据库之前,before\u save
回调将调用。我想您正在寻找一个
在这种情况下,您可以有如下内容:
class Task < ActiveRecord::Base
before_save :convert_task_length_to_float
def convert_task_length_to_float
# do the conversion. set `self.task_float =` to update the value that will be saved
end
end
类任务
在将任务
保存到数据库之前,将调用before\u save
回调。此外,您还可以覆盖任务长度访问器的setter和getter。如下所示(在任务模型中):
类任务
然后在视图中使用它。如果需要,请使用task.task\u length
。此外,还可以覆盖task\u length访问器的setter和getter。如下所示(在任务模型中):
类任务
然后在视图中使用它。如果需要,请使用task.task\u length
。不要忘记/
在Ruby中不会以注释开头<代码>#
可以。你可能想编辑你的帖子来反映这一点。哎呀,大脑放屁。谢谢Charles。别忘了,/
在Ruby中不是以注释开头的<代码>#可以。你可能想编辑你的帖子来反映这一点。哎呀,大脑放屁。谢谢你,查尔斯,我再也不能要求你了。谢谢你,布兰登,我再也不能要求你了。谢谢你,布兰登。