【问题标题】:Rails convention for method in multiple controllers多个控制器中方法的 Rails 约定
【发布时间】:2012-02-06 22:25:19
【问题描述】:

我有一个应用程序,其中包含可通过 site.com/username 访问其个人资料的用户。选择用户名时,我对我的 UsersController 中的方法进行 AJAX 调用,以确保用户名可用(并在提交时检查后端)。我现在想添加也可以通过 site.com/groupname 访问的组。由于组名和用户名不能冲突,因此响应 AJAX 调用的任何控制器方法都需要检查两者,因此 check_username_available 和 check_groupname_available 方法将执行完全相同的操作。由于我不想在 UsersController 和 GroupsController 中复制代码,因此处理此问题的最佳做法/Rails 方法是什么?

为每个控制器都有一个方法似乎有点多余,即使功能被拉到一个助手,因为仍然会有两条路线做同样的事情。拥有一个单独的控制器也可以解决问题,但不确定这是不是好的 Rails 做法。

【问题讨论】:

    标签: ruby-on-rails coding-style


    【解决方案1】:

    重复使用的代码可以通过模块共享

    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 实例方法了。

    【讨论】:

      【解决方案2】:

      DanPickett 的回答很棒。

      另一种选择是在用户模型中创建一个类方法,然后从每个控制器中调用它。由于此名称检查似乎是模型的一项工作,这就是我要做的。

      class User
          def self.check(stuff) ...
      

      【讨论】:

        猜你喜欢
        • 2016-02-13
        • 1970-01-01
        • 1970-01-01
        • 2014-04-12
        • 1970-01-01
        • 1970-01-01
        • 2016-11-30
        • 1970-01-01
        • 2011-06-08
        相关资源
        最近更新 更多