1

重複コードを制限するためのコントローラー構造についていくつか質問があります。

たとえば、男性と女性を取得したい。これを行うための最良の方法は何ですか:

class User {

   public function men() {
       //render
   }

   public function women() {
       //render
   }

   //OR

   public function by_type($type) {
       //render
   }

}

これは簡単な例ですが、型の数は増える可能性があります。また、各タイプは個別のビューを持つことができます。将来のスケーリングソリューションを探しています。この使用例のベスト プラクティス。

ありがとう

4

2 に答える 2

0

Rails には、fat model, skinny controllerと呼ばれる (多少物議を醸す) 原則があります。これは、基本的に、コントローラーを使用してビューのロジックを処理し、いわば「重労働」をモデルに処理させることを意味します。


CakePHP/レール

CakePHP から Rails に移植するには、できるだけモデルを使用することを検討することを強くお勧めします。これにより、すべてのロジックをコントローラーに残すだけでなく、サーバーの完全なパフォーマンス構造を利用するアプリケーションを作成できるためです。多くの人が CakePHP で行っていることと同じです

特にあなたの問題について:

#app/controllers/users_controller.rb
def index
    @user = User.gender(params[:gender])
end

#app/models/user.rb
def self.gender(type)
    where?("type = ?", type)
end

これにより、コントローラーを可能な限り薄く保つことができるため、アプリケーション全体にコードを正しく分散できます。

Rails は、Web サイトを動的にするレイヤーを提供するだけでなく、サーバー全体を利用する本当に機能的でコンテンツが豊富なアプリケーションを作成するのに役立つという点で、CakePHP とは大きく異なると思います。

于 2013-11-08T09:31:26.383 に答える
0

私があなたの質問を理解している限り、by_typeこの方法で関数内の型を実際にレンダリングする関数を呼び出すことができます:

public function by_type($type) {
    if (method_exist($this, $type) {
        return call_user_func(array($this, $type));
    }
    else {
        throw new Exception('method do not exists!');
    }
}

この方法では、型をレンダリングするメソッドを記述し、メソッドを使用してそれを呼び出すだけで済みますby_type

于 2013-11-08T09:09:04.280 に答える