データをアップデートさせる場合にform_forを使うと、初期値に現在のデータがデフォルトで入ってしまいます。
普通はこれで問題ないのですが、たまに、データベースのデータを加工しなければ表示出来ない時もあります。
どんな時に必要になる?
私の場合、データをバイナリデータとして保存していてそのままViewで読み込もうとすると、
「Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8」
というエラーが出てしまいました。
そういう場合の回避策です。
正しい回避策なのかわかりませんが、調べても見つけられなかったので書いておこうと思いました。
回避方法
まず、通常Viewに更新したいテーブルを渡す時。
1 2 3 4 5 6 7 8 |
class HogeController < ApplicationController def index # テーブルhogeを更新する @hoge = Hoge.find_by_id(1) end end |
そしてこちらがデフォルトの初期値を回避する書き方です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class HogeController < ApplicationController def index # テーブルhogeを更新する @hoge = Hoge.find_by_id(1) # 初期値を変えたいカラム(例でnameカラム)を指定して用意した値を入れる @hoge.name = あいうえお # 初期値をブランクにしたい時は""を代入 @hoge.name = "" end end |
指定したものに変えたいカラム名を指定して値を代入することで回避することが出来ます。
これでブランクなり加工した後の値をセットしたりすることが出来ます。
また、「@hoge.save」としない限りセットしたデータで元データが上書かれる事はありません。