由于我几乎是初学者,所以我想知道如何最好地循环访问数组并修改一些值。该数组将呈现给jQuery将接收数据并显示它的视图。我想在控制器上做很多事情(或者我可能会在以后切换到模型)。在Ruby/Rails中循环遍历数组
该数组被称为@invoices
,但在数组中是我想格式化的时间戳。
格式化代码:
Time.at(@invoice.date).strftime("%d/%m/%Y")
有人能告诉我如何遍历并覆盖时间戳值
由于我几乎是初学者,所以我想知道如何最好地循环访问数组并修改一些值。该数组将呈现给jQuery将接收数据并显示它的视图。我想在控制器上做很多事情(或者我可能会在以后切换到模型)。在Ruby/Rails中循环遍历数组
该数组被称为@invoices
,但在数组中是我想格式化的时间戳。
格式化代码:
Time.at(@invoice.date).strftime("%d/%m/%Y")
有人能告诉我如何遍历并覆盖时间戳值
的红宝石循环中的一个可能的语法将be.-
@invoices.each do |invoice|
invoice.date = Time.at(invoice.date).strftime("%d/%m/%Y")
end
我不清楚你是否只发送日期到JQuery。如果是这样,你可以在你的控制器做到这一点:
respond_to do |format|
format.html { render :json => @invoices.collect {|invoice| invoice.date.strftime("%d/%m/%Y")} }
end
注意没有@
invoice
前的块中,因为invoice
是数组中当前正在处理的各个元素的别名。
如果你想要整个发票,它只是稍微复杂一点,并且有一堆Ruby聪明可以最小化行数。
我将发票数组发送给jQuery,然后我将遍历结果 - 我只是认为最好在发送之前将日期排序为所需的格式。 – tommyd456
如果您只想以特定格式显示数据,则不应更改数据。
Rails允许您更改(每个区域设置特定的)一个Date
如何在视图中呈现的格式:
# 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)
,但它是呈现数据的jQuery – tommyd456
目前还不清楚你如何发送你的数据。即使通过'render:json => @ invoices'直接发送数据,最好使用全局定义的日期格式:比使用我的第二种方法''invoices.map {| invoice | invoice.date.to_s(:my_format)}'如果你给它一个更好的名称'my_format',它可以在应用程序的任何地方重用,并且你不需要记住这个模式'“%d /%m /%Y”' 。稍后更改为其他模式会更容易。 – spickermann
其实你所关心的是如何呈现数据。这不是属于控制器的逻辑。
更好的方法是在模型中做到这一点。假设你使用JSON数据渲染到jQuery的,你只需要添加一个发明的方法和覆盖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
然后在控制器你需要做什么。
谢谢 - 我实际上曾经有过这样的一点 - 它做的你的东西有点错了! – tommyd456
它是'@invoices.date = Time.at(invoice.date).strftime(“%d /%m /%Y”)' – tommyd456
@ tommyd456不是'@ invoice',只是'invoice'。该块的变量由'| invoice |'定义,没有任何内容为您设置“@ invoice”。 – meagar