Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在POST/PUT到数据库之前,将时间(MM:SS)转换为浮点(秒)_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 3.2 - Fatal编程技术网

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中不是以注释开头的<代码>#
可以。你可能想编辑你的帖子来反映这一点。哎呀,大脑放屁。谢谢你,查尔斯,我再也不能要求你了。谢谢你,布兰登,我再也不能要求你了。谢谢你,布兰登。