モデルとフィールド
items テーブルに :all, :integer というカラムがあるとする。
フォーム上で a b c d の4つのフィールドから数値を入力し、これらを、a*1000+b*100+c*10+d といった感じで合成したデータを params[:item][:all] として保存したいと考えている。
当然モデルには a b c d は定義されてないので、ここにメソッドとして定義して処理するのだろうなと思うのだが、どう書けばよいのか? ひとまず「かんたん RoR 」の例を参考にして、
[ model/item.rb ]
def a
end
def a=(a)
xxx(a)
end
def b
end
def b=(b)
xxx(b)
end
def xxx(a)
...
end
のような感じでやってみたものの、まったく機能していない様子。コントローラで処理してもいいのだろうか、とも思ってそちらで
params[:item][:all] = param[:item][:a] * 1000 + ...
といった感じにしてみても同じくうまくいっていない様子。
合成しようとなどせずに、個々にカラムを作ってしまえば一番よいのかもしれないのだが(やたらとカラム数が多くなるという弊害はありそうだけれど)、後の処理を考えると合成したデータで保存できていた方が便利ではと思っているので、なんとか実現させたいのだけれど、もはや頭グルグル状態。Ruby のメソッドのあたりのマニュアルとか、あれこれ読んでみるものの、なかなか理解がすすまない。
追記:04/05
楽にできるものをなにも苦労することもあるまいと、あっさりカラムを増やしてしまうことに変更。いやまあ、やってみればそれはそれで学習にもなるしまったく無益でもないだろうけれど、編集ページでも再変換しなきゃいけないとか、本当にそれが必要なのかと考えると、もっと時間はほかに使ったほうがよかろうという考えもまた真であったりするなと。どのみち根幹処理をどうするのかはまだ決まってないわけだし。
| 固定リンク
コメント