因为我几乎是 Rails 的初学者,所以我想知道如何最好地循环遍历数组并修改一些值。数组被渲染到一个视图,jQuery 将在该视图中接收数据并显示它。我想在 Controller 中做艰苦的工作(或者我可能会在以后切换到模型)。
该数组被调用@invoices
,但在数组中是一个我想要格式化的时间戳。
格式化的代码是:
Time.at(@invoice.date).strftime("%d/%m/%Y")
有人可以告诉我如何循环并覆盖时间戳值
因为我几乎是 Rails 的初学者,所以我想知道如何最好地循环遍历数组并修改一些值。数组被渲染到一个视图,jQuery 将在该视图中接收数据并显示它。我想在 Controller 中做艰苦的工作(或者我可能会在以后切换到模型)。
该数组被调用@invoices
,但在数组中是一个我想要格式化的时间戳。
格式化的代码是:
Time.at(@invoice.date).strftime("%d/%m/%Y")
有人可以告诉我如何循环并覆盖时间戳值
ruby 循环的一种可能语法是.-
@invoices.each do |invoice|
invoice.date = Time.at(invoice.date).strftime("%d/%m/%Y")
end
其实你关心的是如何呈现数据。这不是属于控制器的逻辑。
更好的方法是在模型中进行。假设您使用 JSON 将数据呈现给 jQuery,您只需要添加一个 present 方法并覆盖 as_json
class Invoice < ActiveRecord::Base
# Add a method to present the original date
def formatted_date
Time.at(self.date).strftime("%d/%m/%Y")
end
# Include above method in Controller's to_json and remove old :date
def as_json(options)
super(method: :formatted_date, except: :date)
end
end
然后在控制器中你什么都不用做。
我不清楚您是否只向 JQuery 发送日期。如果是这样,您可以在控制器中执行此操作:
respond_to do |format|
format.html { render :json => @invoices.collect {|invoice| invoice.date.strftime("%d/%m/%Y")} }
end
请注意,块中没有@
before invoice
,因为invoice
它是当前正在处理的数组中单个元素的别名。
如果要整张发票,只是稍微复杂一点,还有一堆 Ruby 的小聪明,可以尽量减少行数。
如果您只想以特定格式显示数据,则不应更改数据。
Rails 允许您更改 aDate
在视图中呈现的格式(特定于每个区域设置):
# config/locales/en.yml
en:
time:
formats:
my_format: "%d/%m/%Y"
# in the view
<%= l invoice.date, format: :my_format %>
(见: http: //guides.rubyonrails.org/i18n.html#adding-date-time-formats)
或者(如果您不需要语言环境支持)您将我们自己的格式添加到to_formatted_s
方法中:
# in config/initializers/date_formats.rb
Date::DATE_FORMATS[:my_format] = "%d/%m/%Y"
Time::DATE_FORMATS[:my_format] = "%d/%m/%Y"
# in the view
<%= invoice.date.to_s(:my_format) %>
(见:http ://api.rubyonrails.org/classes/Time.html#method-i-to_formatted_s )