假设在控制器中我以这种方式从数据库中获取一个对象数组:
@statuses = TwitterStatus.find(:all, :order => "tweet_id DESC", :include => :twitter_user)
此外,我在视图中有以下循环:
<% unless @statuses.nil? -%>
<ol>
<% for status in @statuses %>
<li><%= h(status.text -%>/li>
<% end -%>
</ol>
<% end -%>
我的模型类中有更多数据(用户信息,status_id等),我想在视图中添加。
问题是这个日期的大部分时间都需要改变。我需要以某种方式格式化日期。我想将“target =”_ blank“'插入”text“字段中的任何网址。
我的第一个就是在控制器中有这样的东西:
for status in @statuses
status.date = status.date.formatDate
status.url = status.date.insertTarget
status.user = status.user.doUserstuff
#Adding new attribute
status.username = status.user.lookupUserName
end
这对我来说感觉有点蹩脚。但是,我想不出更好的事情。
答案 0 :(得分:3)
我想同意阿拉姆。我的视图中充斥着格式化代码,直到我开始添加大大清理它们的模型方法。在我的上一个应用程序中,它是Names and Times(员工安排应用程序)。
class Employee
def full_name
self.first_name + " " + self.last_name
end
end
时间永远是一种痛苦,我的观点中到处都是时间(对应用程序至关重要)。所以我想在任何地方显示开始时间,而不是调用我存储在数据库中的属性,我调用了一个自定义方法
class Schedule
def formatted_start_time
self.start_time.strftime('%I:%M%p')
end
end
另外作为最后一点,如果您在视图中的所有位置继续以相同的方式格式化时间,则可以扩展Time类并使您的调用更加简洁。在我的初始化文件夹文件夹中,我添加了一个''conversions.rb'文件,其中我添加了这一小行
Time::DATE_FORMATS.update(:shift => '%I:%M%p')
现在我所做的就是打电话:
time_object.to_s(:shift)
在应用程序的任何位置返回我经常使用的格式化字符串。您可以拥有自己喜欢的格式的完整列表,以清理您的视图并使其更易于理解。
答案 1 :(得分:2)
您可能希望向TwitterStatus模型添加一些实例方法。 例如:
def formatted_date
self.date.formatDate
end
答案 2 :(得分:0)
格式的责任真的属于视图。
“Rails Way”将添加一个辅助方法来进行格式化。
每个控制器都有一个辅助模块,还有一个全局ApplicationHelper。
例如,如果您的控制器是StatusController
module StatusHelper
def status_text( status )
# do all your formatting and HTML escaping here
...
end
end
并在视图中
<% unless @statuses.nil? -%>
<ol>
<% for status in @statuses %>
<li><%= status_text(status) -%></li>
<% end -%>
</ol>
<% end -%>