2011-12-04 6 views
0

私は、さまざまなタイプの練習問題を持つアプリケーションを構築することで、Railsの開発スキルを練習しています。おそらく、さまざまな主題に関する多項選択問題のようなものです。Rails - モデルやコントローラなどの方法?

質問が正しく答えるかどうかを確認する1つの方法は、モデルで検証を使用することです。しかし、私は実際に結果を保存する必要はありませんし、それぞれの質問がそれぞれの回答をチェックするための独自の検証を持つので、多くの異なるモデルを作成することになります。

件名ごとに新しいコントローラアクションを作成する代わりに、ありますか。

どうすればいいですか? MVCパターンと

答えて

0

http://www.enode.com/x/markup/tutorial/mvc.html

、コントローラは、モデルによって保持データを操作の制御に通常です。

あなたのロジックの大部分をコントローラに保存するのがよい形式です。私は新しいControllerアクションについて何を意味するのかよく分かりませんが、おそらくあなたがしたいことは、あなたのView(form_forを参照してください)にある種のフォームを設定し、コントローラーを起動させることです。コントローラは、検証や必要な処理を行います。

これは助けになるはずです: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

は、したがって、たとえば、あなたは、あなたのビュー(例えばクイズ)でフォームを持っているコントローラでのユーザーのスコアを計算し、のためのフィールドとしてそれを救うかもしれませんデータベース内のユーザー。

+0

私は20または30のクイズがある場合、コントローラは非常にかさばる。私はヘルパーにメソッドを張っていますか? – Leahcim

+0

ヘルパーは、常に繰り返されるコードに使用されます。そうではありません、あなたはヘルパーにそれを入れません。代わりに、モデルによって管理されているクイズのデータ​​構造を検討する必要があります。フィールドの例は「正解」です。この方法では、複数の選択肢のクイズがある場合、それぞれがD.R.Y.で確認できます。コントローラーがどの答えが正しいかを知る必要はありません。 http://oldwiki.rubyonrails.org/rails/pages/DRY – varatis

+0

あなたのコントローラには、check_correct_answersメソッドがあります。このメソッドは、任意の複数のクイズをチェックすることができます(クイズのデータ​​を取得することによって) – varatis

0

ロジックを配置する場所に関する議論は、複雑なパターン自体と同じくらい古いものです。 MVCのために、私は自分自身に尋ねることにしました:

  • ロジックはモデルに不可欠ですか?
  • モデル自体はロジックなしでもうまく機能しますか?
  • モデルにはコントローラーに対する要件はありませんか?
  • モデルを再利用する場合は、関連するビジネスロジックを取りたいのですか、それとも途中に入りたいのですか?

私の一般的なアドバイス:「低い」として、ビジネスロジックを置く:次の制約のいずれかに違反することなく、可能な限り(下デシベル、そのモデル、コントローラ、ビュー):

  • 認証と承認をビューに属していません。コントローラーのプロパティ(セッションや一般的なAPIのアクセスルールなど)やモデル(承認:誰がどのコンテンツにアクセスできるか)のいずれかです。
  • UI /表示/入力メソッド関連のものには入りません。モデルまたはdb。 html、xml、またはjsonをレンダリングするかどうか、またどのようにレンダリングするかをモデル/ dbに決定させないでください。
  • データの整合性と整合性がコントローラ/ビューにありません。理想的には、データモデルは有効なデータのみを受け入れ、トランザクションの安全性を使用し、コントローラに障害や成功を返します。理想的には、整合性はdbレベルで処理されます。
  • モデルは、新しいプロジェクトの他のコントローラ/ビューで再利用できます(別のWeb APIに切り替えることを考えてください)。制約が大きすぎると、新しい状況では使用できなくなる可能性があります。
  • もっと...

一般的に:疑問があれば、コントローラーに入れてください。 ;)

関連する問題