0

私はほとんど Rails の初心者なので、配列をループしていくつかの値を変更する最善の方法を知りたいと思っていました。配列は、jQuery がデータを受信して​​表示するビューにレンダリングされています。コントローラーで大変な作業をしたいです(または、後でモデルに切り替えるかもしれません)。

配列が呼び出され@invoicesますが、配列にはフォーマットしたいタイムスタンプがあります。

フォーマットするコードは次のとおりです。

Time.at(@invoice.date).strftime("%d/%m/%Y")

誰かがタイムスタンプ値をループして上書きする方法を教えてもらえますか

4

4 に答える 4

2

ruby ループの可能な構文の 1 つは次のようになります。

@invoices.each do |invoice|
    invoice.date = Time.at(invoice.date).strftime("%d/%m/%Y")
end
于 2013-10-12T13:12:26.433 に答える
1

実際にあなたが懸念したのは、データをどのように提示するかです。これはコントローラーに属するロジックではありません。

より良い方法は、モデルで行うことです。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

次に、コントローラーでは何もする必要はありません。

于 2013-10-12T13:57:13.750 に答える
0

日付だけを JQuery に送信しているかどうかはわかりません。その場合は、コントローラーでこれを行うことができます。

respond_to do |format|
   format.html { render :json => @invoices.collect {|invoice| invoice.date.strftime("%d/%m/%Y")} }
end

ブロック内に@beforeがないことに注意してください。これは、現在処理されている配列内の個々の要素のエイリアスであるためです。invoiceinvoice

請求書全体が必要な場合は、もう少し複雑で、行数を最小限に抑えることができる Ruby の巧妙さがたくさんあります。

于 2013-10-12T13:45:14.803 に答える