人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Railsで、DBと直接対応しない入力フォームの作成方法について質問です。

DBのデータを入出力するような画面を作るときは、
- Modelを作って(rails g model item hoge:string)
- Model内にValidationを書いて
- Controllerはわりと簡単に書いて
- erbでform_forを使ってフォームを作る
こんな感じだと思いますが、DBと直接対応しないフォーム(例えば検索フォームとか、ファイルに出力するためのフォームとか)はどうやって作ればいいのでしょうか?

普通にrails gでModelを作ってしまうと、rake db:migrateでDBにテーブルが作られてしまいます。そこで手動で作ってみましたが、実行時にテーブルがないというエラーになってしまいました(Mysql2::Error: Table 'db.items' doesn't exist: SHOW FULL FIELDS FROM `items`)。

Modelを使わず、Controllerに作ったインスタンス変数でerbに渡し、フォームから送られてきた値はparamsで受け取るようにしたら動きましたが、Validationをどこに書くかがわかりませんでした。

そういう画面を作るときのRailsらしい方法を教えてください。

●質問者: nacookan
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

質問者から

すみません、書き忘れましたが、Railsは3.2を使っています。


1 ● うぃんど
●170ポイント ベストアンサー

enviroment.rbに下記の記述を追加して、
データベースを利用しないことにする方法もありますが…。
config.frameworks -= [ :active_record ]

ActiveRecordの代わりにActiveModelを利用する方法が良いでしょうね。
http://tsubo3.wordpress.com/2011/12/26/rails3-activerecord%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%83%A2%E3%83%87%E3%83%AB/
http://www.atmarkit.co.jp/fcoding/rails/articles/rails3/02/rails302a.html


nacookanさんのコメント
素早い回答ありがとうございました。 ActiveModelの存在を知りませんでしたが、まさにそれが求めていた答えでした。 ググるキーワードがわかってしまえばこっちのものです。 試しに実装してみたところ、期待通りの動作をしています。

2 ● gizmo5
●130ポイント

ActiveModel として実装します。

http://d.hatena.ne.jp/fujisan3776/20110701/1309478262

基底クラスを作って、attr_accessor と validates_* をその上で実装するのがCOOL & DRY。

そのようなフォームがいくつもあるなら、それ用の基底クラスを作っておくのが良さそうです。


nacookanさんのコメント
どうもありがとうございます。 ひとつひとつ順番に実装していったところ、確かにそのURLの記事でやってるようなベースクラスが必要になりました。ものすごく参考になりました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ