【Rails】form_forを使う時モデルに定義されていないパラメータを使いたい時

Railsのform_forって便利ですよね。

モデルに定義されていないパラメータを扱いたい時は少し工夫が必要です。
例えば何かを投稿してその時にツイッターにシェアするかどうかをユーザに選択する場合を考えてみます。

tw_shareというパラメータでシェアするかどうかの制御をしたとした時、このカラムは実際のテーブルには存在しないので



というようにやりたくなりますが、このような実装をしてもうまく行きません。
form_forの中では正しくは下記のようにするのですが、このままではtw_shareというカラムがModelにはないのでうまく行きません。



モデル側にも一工夫必要です。



attr_accessorで一つ仮想的なカラムを実装する感じです。
上記の例だとちょっとおまけでこのtw_shareというカラムを使って実際のシェアの制御をしています。

実戦に即した実装をするならば、レコードがDBに入ったあとでシェアなどの実装はしたいですよね(シェアに失敗して本来のレコード作成や更新まで行かないといったことがあっては困りますよね)
ここではafter_saveのタイミングかつこのtw_shareが1で指定されている場合のみシェアするといった実装になっています。

こうすれば投稿だけでなくデータの更新時にもそのまま同じ処理を使えますが、httpのパラメータで制御する場合どうしてもcontrollerでちょっとした制御が必要になりますよね。
トータルで見るとhttpのパラメータで制御するよりスマートに実装できる気がします。
スポンサーサイト

役に立ったと思ったら下記をクリックお願いします。

今後の更新の励みになります。

にほんブログ村 IT技術ブログ IT技術メモへ

にほんブログ村 IT技術ブログへ

不定期ですが技術ネタを共有して行きますのでもしよろしければ購読いただければと思います

follow us in feedly

スポンサーリンク

テーマ : プログラミング
ジャンル : コンピュータ

Tag:Rails  Trackback:0 comment:0 

Comment

comment form
(編集・削除用):
管理者にだけ表示を許可
プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる