我有一个应用,其用户的个人资料可以通过site.com/username访问。在选择用户名时,我对我的UsersController中的方法进行AJAX调用,以确保用户名可用(并在提交时检查后端)。我现在想要添加也可以通过site.com/groupname访问的组。由于组和用户名不能冲突,因此响应AJAX调用的任何控制器方法都需要同时检查两者,因此check_username_available和check_groupname_available方法将执行完全相同的操作。最好的做法/ Rails方法是什么,因为我不想在UsersController和GroupsController中复制代码?
为每个控制器设置一个方法似乎有点多余,即使将功能拉出到帮助器,因为仍然会有两条路径执行相同的操作。有一个单独的控制器也解决了这个问题,但不确定这是否是很好的Rails实践。
答案 0 :(得分: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实例方法。
答案 1 :(得分:0)
DanPickett的答案很棒。
另一种选择是在用户模型中创建一个类方法,并从每个控制器中调用它。由于这个名称检查似乎是模型的工作,这就是我要做的。
class User
def self.check(stuff) ...