由於我幾乎是初學者,所以我想知道如何最好地循環訪問數組並修改一些值。該數組將呈現給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