Ruby Rails 3-更灵活的时间和文字
我认为:Ruby Rails 3-更灵活的时间和文字,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我认为:到期 但是,与大多数time_ago_的用例不同,换句话说,我需要支持time ago和time AHEAD。由于到期日可以是过期(时间之前)和即将到来(时间之前),我如何有条件地显示它,以便如果它是过期的,上面的代码将输出“x天前到期”,如果它是在未来到期的,则输出“x天后到期”从外观上看,您正在使用erb模板引擎,您可以在视图逻辑中通过使用=符号来执行if条件,这样您就可以执行类似的操作 <% if time_ago < Time.now %> <%= tim
到期
但是,与大多数time_ago_的用例不同,换句话说,我需要支持time ago和time AHEAD。由于到期日可以是过期(时间之前)和即将到来(时间之前),我如何有条件地显示它,以便如果它是过期的,上面的代码将输出“x天前到期”,如果它是在未来到期的,则输出“x天后到期”从外观上看,您正在使用erb模板引擎,您可以在视图逻辑中通过使用=符号来执行if条件,这样您就可以执行类似的操作
<% if time_ago < Time.now %>
<%= time_ago_in_words(todo.due) %>
<% else %>
<%= time_ahead_in_words(todo.due) %>
<% end %>
应该给你一个做什么的主意。尽管我相信更好的做法是将其移动到rails应用程序的模型部分。我的共同公理是胖模型瘦控制器,但这更多的是建议,而不是规则
编辑
如果Alex在下面的评论中提到,这可能会出现在助手方法中,而不是应用程序的模型部分从外观上看,您正在使用erb模板引擎,您可以通过输入=符号来处理视图逻辑中的条件,这样您就可以执行类似的操作
<% if time_ago < Time.now %>
<%= time_ago_in_words(todo.due) %>
<% else %>
<%= time_ahead_in_words(todo.due) %>
<% end %>
应该给你一个做什么的主意。尽管我相信更好的做法是将其移动到rails应用程序的模型部分。我的共同公理是胖模型瘦控制器,但这更多的是建议,而不是规则
编辑
Alex在下面的评论中提到过,这可能应该放在助手方法中,而不是应用程序的模型部分,在您的模型中有:
class Someclass < ActiveRecord::Base
attr_reader :time_diff
def time_diff
time_difference =
if todo.due > Time.new()
todo - Time.new()
else
Time.new() - todo.due
end
end
time_difference.strftime("%I:%M%p") # This gets returned.
end
class-SomeclassTime.new()
todo-Time.new()
其他的
Time.new()-todo.due
终止
终止
时间差。strftime(“%I:%M%p”)#返回此值。
终止
在你看来:
<%= time_in_words(@db_record.time_diff) %>
Where @db_record is a row in the database table for the model in question.
其中@db_record是相关模型的数据库表中的一行。
在您的型号中:
class Someclass < ActiveRecord::Base
attr_reader :time_diff
def time_diff
time_difference =
if todo.due > Time.new()
todo - Time.new()
else
Time.new() - todo.due
end
end
time_difference.strftime("%I:%M%p") # This gets returned.
end
class-SomeclassTime.new()
todo-Time.new()
其他的
Time.new()-todo.due
终止
终止
时间差。strftime(“%I:%M%p”)#返回此值。
终止
在你看来:
<%= time_in_words(@db_record.time_diff) %>
Where @db_record is a row in the database table for the model in question.
其中@db_record是相关模型的数据库表中的一行。
您可以创建自己的助手,如下所示:
def time_diff_in_words(from_time)
# compute days difference from now
days_delta = (Time.now - from_time) / (24 * 60 * 60)
# render text
days = pluralize(days_delta, 'day')
days_delta > 0 ? "Due #{days} ago" : "Due in #{days}"
end
您可以创建自己的帮助器,如下所示:
def time_diff_in_words(from_time)
# compute days difference from now
days_delta = (Time.now - from_time) / (24 * 60 * 60)
# render text
days = pluralize(days_delta, 'day')
days_delta > 0 ? "Due #{days} ago" : "Due in #{days}"
end
如果您确实要处理自然语言日期时间解析,我建议 它有许多日期时间解析的方法
HTH如果您要处理自然语言日期时间解析,我建议您 它有许多日期时间解析的方法
HTH“胖模型瘦控制器”的确如此,但在本例中,这是视图逻辑。如果要重构它,它应该放在一个助手中,而不是模型中。而且,第一行可能应该是
,现在我想起来了,我必须同意你的意见,并将编辑我的回答。这是一篇很好的文章,为德语解释了这一点:“胖模型瘦控制器”,确实如此,但在这种情况下,这就是视图逻辑。如果要进行重构,它应该放在助手中,而不是模型中。而且,第一行应该是
,现在我想起来了,我必须同意你的意见,并编辑我的回答。这篇文章很好地用德语解释了这一点:我有一个初学者的问题,但是在助手中编写代码有什么好处,而不是在模型中?或者您是说在模型中作为“助手方法”编写上述代码?很抱歉造成混淆。@TrevanHetzel Rails基于MVC,保持视图“干净”的一种方法是将代码和计算移动到帮助和MVC模式的其他部分。谢谢,这很有意义。所以实际上我可以跳过助手,把我所有的计算代码都放在控制器里?好吧,如果我选择的话,我会把它放在应用程序的一部分。我会在谷歌上搜索“胖模特瘦控制器”关于这一点有各种各样的讨论如果你使用这个应用来学习rails/ruby,那么我会尝试遵循最佳实践,因为它会让你的程序和你变得更好。另一方面,如果这是一个产品,你正试图推动它也许最好只是离开它,只是让它的工作,我有一种初学者的问题,但什么是在一个助手编写代码的优势,而不是在模型?或者您是说在模型中作为“助手方法”编写上述代码?很抱歉造成混淆。@TrevanHetzel Rails基于MVC,保持视图“干净”的一种方法是将代码和计算移动到帮助和MVC模式的其他部分。谢谢,这很有意义。所以实际上我可以跳过助手,把我所有的计算代码都放在控制器里?好吧,如果我选择的话,我会把它放在应用程序的一部分。我会在谷歌上搜索“胖模特瘦控制器”关于这一点有各种各样的讨论如果你使用这个应用来学习rails/ruby,那么我会尝试遵循最佳实践,因为它会让你的程序和你变得更好。另一方面,如果这是一个您正试图推动的产品,那么最好让它保持原样,让它工作。您在哪里定义@time\u difference
变量?您在哪里定义@time\u difference
变量?