0

モデルに既に日付フィールド (文字列) があります。既存の日付フィールドに関連するテキスト検索で使用するために、異なる長い日付形式の他の文字列フィールドを追加する予定です。これは、視覚障害者のテキスト検索を容易にするためです。

私は以前にこのようなことをしたことがありますが、うまくいきました。

add_column :media_libraries, :media_year, :string, default: Time.now.year

ただし、私がやりたいことは、日付フィールドを追加し、既存の日付フィールドの値を使用して新しい日付フィールドをデフォルトにすることです。

新しい長い日付フィールドの値を初期化するために使用したいフィールドを持つビューの 1 つに、以下のコードがあります。

media_created.to_date

レコードの別のフィールドの値に応じてデフォルト値を設定できる移行で、このようなことはできますか?

add_column :media_libraries, :media_created_en, :string, default: :media_created.to_date.strftime("somedateformat")

別の投稿を読んで、Rails 移行でデータベース列を追加し、回答の 1 つが移行内のクエリを示唆した別の列に基づいてデータを入力しました。これは、それを実装するための私の試みです。ただし、スタック オーバーフローに投稿している他の人は、移行で他のフィールドを参照するのは良い考えではないと感じています。私にとっては、これは 1 回限りのことなので、これらの問題について心配する必要はありません。

MediaLibrary.update_all(media_created_en: :media_created.to_date.strftime("%B %d, %Y"), media_created_fr: :media_created.to_date.strftime("%d %B %Y"), media_created_pt: :media_created.to_date.strftime("%d %B %Y"), media_created_es: :media_created.to_date.strftime("%d de %B de %Y"))

更新するレコードが 1000 を超えるため、既存のレコードに対してこれを実行したいと考えています。モデルまたはコントローラーにコードを配置して、モデルの今後の更新用にフィールドを設定します。

私はいたるところを見てきましたが、デフォルトまたは上記の1つの例に使用される組み込み関数しか見つかりません。API は、「options{}」以外には何も言いません。これができない場合は、アプリケーションの管理セクションでこれを行うメソッドを 1 回記述する準備ができています。

どんな助けでも大歓迎です。探し続けます。

4

1 に答える 1

0

調査を続けましたが、何も見つからなかったので、移行でいくつかのことを試すことにしました。モデルのフィールドをデフォルト値にうまく組み込むことができませんでした。時間に追われていたので、移行でフィールドを作成することにし、モデルのフィールドを更新するメソッドをコントローラーに記述しました。ここで、フィールドが適切に更新されるように、追加されるレコードのフィールドを更新するコードを記述します。

誰かがこれに対する解決策を持っている場合は、ここに投稿してください。

于 2013-08-07T16:03:18.663 に答える