1

Books という名前のコントローラー (および対応する Book モデル) と、Users という名前のコントローラー (および対応する User モデル) があるとします。これらの各コントローラーには標準の CRUD アクションがあり、私の Web サイトの API の手段としても機能します。

私のサイトのほとんどのページは、このフレームワークに簡単に適合します。例えば、本を見る。または、ユーザー アカウントを表示します。または、ユーザー アカウントを編集します。等。

しかし、ややユニークなインデックスがあるとしましょう。ユーザーのリストと本のリストを表示したいとします。これにより、いくつかの疑問が生じます。

  • これは、UsersController、BooksController、または新しいコントローラーのどのコントローラーの下に置く必要がありますか?
  • 新しいコントローラーを作成すると、特に特定のモデルに関連付けられないため、MVC の原則に違反していると見なされますか?
  • この新しいコントローラー アクションはどのようにデータを取得しますか? if it 内に新しい ActiveRecord クエリを記述すると、他のコントローラーにこのようなコードが既にあるため、同じことを繰り返すことになります。可能であれば、独自の API も使用したいと思います。
4

2 に答える 2

1

モデルでスコープ (Google 検索) を使用して、コントローラーをスリムに保つことができます。表示したい内容に応じて、新しいメソッドとビューを作成できます。本と別のモデルにある著者をリストするユーザー ダッシュボードがあるとします。

ユーザーに関連するため、ユーザーコントローラー内に def dashboard という新しいメソッドを作成できます。

def dashboard

end 

モデルにヘルパー メソッドを作成して、特定のクエリのスコープを設定します。ルート ファイルに適切なルートを追加することも忘れないでください。

これが役立つことを願っています

于 2013-02-09T04:21:08.547 に答える
0

どちらでも構いません。

1) 好みの問題になる可能性があり、アプリケーションのコンテキストによって変わる可能性がありますが、おそらく別のコントローラーを作成します。

2) 両方のモデルからデータを取得します。コントローラーとモデルを 1 対 1 でマッピングする MVC ルールはありません。

「クエリ」の意味がよくわかりませんが、DRY を避けるためにモデル メソッド (またはスコープ) に入れることができます。もちろん、ActiveRecord はコントローラーをメソッドとしてカプセル化するため (例: User.find(n) )、コントローラーで単純なクエリを実行したくなることがあります。

于 2013-02-09T04:29:08.793 に答える