2012-02-06 3 views
4

私は、プロファイルがsite.com/usernameからアクセスできるユーザーを持つアプリを持っています。ユーザ名を選択するときに、私はユーザ名が利用可能であることを確認するために、AJAXを自分のUsersControllerのメソッドに呼び出します(そして、送信時にバックエンドをチェックします)。 site/groupnameからアクセスできるグループを追加したいと考えています。グループ名とユーザ名は衝突しないので、AJAX呼び出しに応答するコントローラメソッドは両方ともチェックする必要があるため、check_username_availableメソッドとcheck_groupname_availableメソッドはまったく同じことを行います。 UsersControllerとGroupsControllerの両方でコードを複製したくないので、これを処理するベストプラクティス/ Railsの方法は何ですか?複数のコントローラのメソッドのためのレールの規則

機能がヘルパーに引き出されていても、各コントローラのメソッドを少し冗長にすると、同じことをする2つのルートが存在するためです。別のコントローラを持つことで問題は解決しますが、これはRailsの実践が良いかどうかは分かりません。再利用される

答えて

4

コードは、両方のコントローラが現在check_nameインスタンスメソッドにアクセスする必要がありますモジュール

class UsersController < ActionController::Base 
    include NameUniqueness 
end 

class GroupsController < ActionController::Base 
    include NameUniqueness 
end 

module NameUniqueness 
    protected 
    def check_name 
    # implementation here 
    end 
end 

を介して共有することができます。

0

DanPickettの回答が素晴らしいです。

もう1つの選択肢は、ユーザーモデルでクラスメソッドを作成し、各コントローラからクラスメソッドを呼び出すことです。この名前のチェックはモデルの仕事のように思えるので、それは私がやることです。

class User 
    def self.check(stuff) ... 
関連する問題