2012-02-06 12 views
4

我有一個應用程序,其用戶的個人資料可通過site.com/username訪問。在選擇用戶名時,我對我的UsersController中的方法進行AJAX調用,以確保用戶名可用(並在提交時檢查後端)。我現在想要添加也可通過site.com/groupname訪問的組。由於組和用戶名不能相互衝突,因此響應AJAX調用的任何控制器方法都需要檢查兩者,因此check_username_available和check_groupname_available方法將執行完全相同的操作。因爲我不想在UsersController和GroupsController中複製代碼,所以最好的做法/ Rails的方式是什麼?多個控制器中的方法的Rails約定

對於每個控制器,有一個方法似乎有點多餘,即使將功能提交給幫助程序,因爲仍然會有兩條路徑執行相同的操作。有一個單獨的控制器也解決了這個問題,但不知道這是不錯的Rails練習。被重用

回答

4

代碼可以經由模塊

class UsersController < ActionController::Base 
    include NameUniqueness 
end 

class GroupsController < ActionController::Base 
    include NameUniqueness 
end 

module NameUniqueness 
    protected 
    def check_name 
    # implementation here 
    end 
end 

兩個控制器現在將有權訪問的check_name實例方法被共享。

0

DanPickett的回答非常好。

另一種選擇是在用戶模型中創建一個類方法,並從每個控制器調用它。由於這個名稱檢查對於模型來說似乎是一份工作,所以我會這樣做。

class User 
    def self.check(stuff) ... 
相關問題