Rails 在模型中创建秒表参数
Rails create a stopwatch parameter in model
我需要创建一个基于时间的倒计时模型属性,这样我就可以在视图中调用它,例如
<%=Merge.timer%>
并且输出如下:
#22:39
#22:38
#22:37...
我将 Merge 作为一个模型,可能有也可能没有很多条目,在我看来我必须调用
<%merge_lists.each do |i|%>
<%end%>
所以对于每个 merge
,我想倒计时直到到期。这实际上取决于 merge
的创建时间。假设每个 merge
持续 7 小时。
正如我在评论中所说,我会将结束时间存储在数据库中并计算方法中的剩余时间。
要存储时间,您可以使用时间戳。
rails g model merge end_time:timestamp
或者,如果您已经创建了模型...
rails generate migration add_end_time_to_merge end_time:timestamp
您可以使用 Time 对象计算结束时间,该对象可以如下创建。您需要在创建每个 Merge
时执行此操作,这可能会在控制器中。
@merge.end_time = 6.hours.since # for some reason, this means 7.
计算剩余时间的代码应该放在模型中。
class Merge < ApplicationRecord
def time_remaining
Time.at(end_time - Time.now)
end
def timer
time_remaining.strftime("%H:%M:%S")
end
end
timer
方法输出字符串中剩余的时间,如"06:49:23"
。
最大的问题是如何在视图文件中不断更新它。 Ruby 只运行一次 - 在页面到达用户之前。为了让它不断更新,你需要使用一些 JS。
function updateTime() {
var address = "<%= @address_to_time %>";
$.get(address, function(data) { // Send Ajax request
$("#time").html(data); // Update contents of container
updateTime(); // Repeat when finished
});
}
updateTime();
您可以通过局部使时间可用,它只呈现 HTML 来显示时间。在 @address_to_time
中提供地址。
我需要创建一个基于时间的倒计时模型属性,这样我就可以在视图中调用它,例如
<%=Merge.timer%>
并且输出如下:
#22:39
#22:38
#22:37...
我将 Merge 作为一个模型,可能有也可能没有很多条目,在我看来我必须调用
<%merge_lists.each do |i|%>
<%end%>
所以对于每个 merge
,我想倒计时直到到期。这实际上取决于 merge
的创建时间。假设每个 merge
持续 7 小时。
正如我在评论中所说,我会将结束时间存储在数据库中并计算方法中的剩余时间。
要存储时间,您可以使用时间戳。
rails g model merge end_time:timestamp
或者,如果您已经创建了模型...
rails generate migration add_end_time_to_merge end_time:timestamp
您可以使用 Time 对象计算结束时间,该对象可以如下创建。您需要在创建每个 Merge
时执行此操作,这可能会在控制器中。
@merge.end_time = 6.hours.since # for some reason, this means 7.
计算剩余时间的代码应该放在模型中。
class Merge < ApplicationRecord
def time_remaining
Time.at(end_time - Time.now)
end
def timer
time_remaining.strftime("%H:%M:%S")
end
end
timer
方法输出字符串中剩余的时间,如"06:49:23"
。
最大的问题是如何在视图文件中不断更新它。 Ruby 只运行一次 - 在页面到达用户之前。为了让它不断更新,你需要使用一些 JS。
function updateTime() {
var address = "<%= @address_to_time %>";
$.get(address, function(data) { // Send Ajax request
$("#time").html(data); // Update contents of container
updateTime(); // Repeat when finished
});
}
updateTime();
您可以通过局部使时间可用,它只呈现 HTML 来显示时间。在 @address_to_time
中提供地址。