2011-11-08 7 views
28

レールアプリケーションでコントローラを作成する必要があることが分かったら、私は思っています。レールに新しいコントローラを作成するタイミング

たとえば、私はAgile Web Development with Railsのチュートリアルに進みます。アプリケーションは、別々のビューとcontollerを持つ複数のモデルを作成します。しかし、Storeコントローラーも作成しますが、それに関連付けられているモデルはありません。モデルがないコントローラが必要なのはなぜですか?モデルのコントローラーがすべての必要な操作を処理できませんでしたか?

これは一般的ですか?もしそうなら、コントローラが何かを保証するときはどうしたら決めるのですか?

ありがとうございます!


これらの回答は役に立ちます。ありがとうございました。

自分自身で何かを開発すると、無駄なコントローラを作成したり、必要なコントローラを作成したりすることができなくなります。しかし、コントローラとモデルを1-1の関係として考えるのを止める必要があると思います。私が正しく理解していれば、モデルにアクセスするコントローラが多数あり、1つのコントローラで多くのモデルが使用されていますか?

+0

。または全くありません。 – Ernest

答えて

31

更新:私は非常に多くの私の元の答えよりもはるかに説明を読むHow DHH Organizes His Rails Controllers を読むことを強くお勧めします。


私はあなたが別の言い方をしたい場合は質問がより適しているだろうと思う:

は、なぜ我々はすべてのコントローラのためのモデル(この場合、AR)が必要ですか?

もちろん答えはありません。コントローラーについて考えているときは、データについて考えるのではなく、少し後退して、リソースを考えてみてください。インターネットでRESTを検索すると、たくさんの記事があります。そのほとんどには、リソースの表現のさまざまな説明が含まれています。このストーリーを短くするには、簡略化し、リソースが言及するだけの価値があると言いましょう。記事は(コレクション)リソースです。ストアは(単数のメンバー)リソースです。

たとえば、ユーザーのサインインを行います。おそらくあなたはすでに、新しいユーザーの追加(リソースの作成)、削除(リソースの削除)、単一ユーザーの表示、すべてのユーザーの表示を許可するUsersControllerを既に持っているでしょう。データとコントローラに関して考えると、UserControllerにlogin_userのような追加のアクションを作成することになります。これは匂いです。リソースについて考えてみると、それについて言及する価値のあるものやURIを作成する価値のあるものは、セッションという別のリソースが必要だと思うかもしれません。この方法について考えてみましょう。ユーザーがサインインすると、彼は実際にという名前のセッションリソースを作成します。ログアウトすると、が削除され、リソースが削除されます。私がお勧めRailsのチュートリアル本の中で説明した非常に優れている。要約するとhttp://ruby.railstutorial.org/chapters/sign-in-sign-out#sec:sessions

、これはあなたが新しいコントローラを必要とするとき考え出すに役立つことがあります。

  • あなたは非RESTfulなを置くことについて考えるときコントローラーのアクションはlog_incalculate_dateなどのようになります。
  • あなたが名前を付けることができるものがあり、それが別のリソースであるために十分に「面白い」ものであるとき。あなたのスタイル「外に」で開発しているとき
  • また、このような答えがより自然に来る:http://rubylearning.com/blog/2010/10/05/outside-in-development/

全体的に、RESTおよび多くを助けるその哲学について学びます。

+0

これは非常に深く有益な答えです。 – Ziggy

0

コントローラーを使用して、モデルに境界のないページを作成することができます。その例は、法的通知またはsthかもしれません。そうですね。静的なもの、...

Controller controllsのデータです。ほとんどの場合、これらのデータはModelからのものですが、これは最も一般的な組み合わせではありません。

8

明らかに、固くて速いルールはありません。私はそれがMVCの三つの異なる部分が(「やる」か)何を表しているかの観点から考えると役に立ちだと思う:データとデータ・ロジック・バックエンドを表す

  • モデルを聞かせて
  • コントローラユーザーがモデルと対話
  • ビューは、ユーザがコントローラ

だから、違う続きを経由して相互作用するとき、ユーザーが見ているものですローラーは、あなたがをしたいときに使用され、異なる(カテゴリの)ものです。

たとえば、AWDの本では、デポアプリケーションは、製品を操作して格納することによって(広く)動作します。そのため、製品モデルがあります。

2つの異なる対話方法があります。デポの所有者(商品の追加、価格と在庫の調整...)または顧客(カートに商品を追加する、チェックアウトする...)。したがって、前者の管理コントローラと後者のストアコントローラがあります。

コントローラが別のラッピングを必要とする場合は、もう1つの理由、および最初のものとよく似たものがあります。たとえば、Adminyを実行する前にユーザーを認証する必要がありますが、Customerベースのものではありません。したがって、アクションを2つのコントローラに分けることができ、before_filterを管理者のものに入れて認証を処理することができます。

1

私はRoRにも新しく、私はMichael Hartlからチュートリアルをやっています。私の研究では、Rubyistの経験豊かな人と話すことで、モデル(データベース)の助けが必要なときにコントローラを作成する必要があることが分かりました。たとえば、セッションを作成していて、作成しているメソッドがModel(データベース)とのインタフェース、保存、更新、追加(RESTful動作など)が必要な場合は、コントローラが必要です。

なぜですか?前に述べたように、MVCのフレームワークでは、コントローラーがモデルとやり取りできる唯一の要素である必要があります(ちょっとホットな女性でいっぱいのナイトクラブのVIPセクションでバウンサーのように! !)!!

関連する問題