我的项目名称是clog,所以我将我的模型和控制器命名为:Clog::User
Clog::Userscontroller
。
此命名约定是强制性的吗?
答案 0 :(得分:2)
不,在传统的Rails项目中,这不是必需的。只需按常规方式命名模型和控制器,例如User或UsersController。
另一件事是,当您的项目规模扩大时,您可能需要将模型组织到子模块中。一种方法是使用app关注扩展模型,例如here或here。
至于组织控制器,一种方法是在lib目录中创建一个模块,然后将其包含在ApplicationController中,如下所示:
在lib/authentication.rb
:
module Authentication
def self.included(base)
base.send :before_filter, :login_required
base.send :helper_method, :current_user, :logged_in?
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token]) if cookies[:remember_token].present?
end
#...
end
在app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
include Authentication
#...
end
为此,您需要添加
config.autoload_paths << "#{config.root}/lib"
到您的config/application.rb
文件
但是,如果您计划将Rails项目构建为Rails引擎,则可能需要遵循一些命名约定。 Rails引擎的一个很好的例子是forem。
答案 1 :(得分:0)
是的,遵循命名约定有很大帮助,因为rails不仅使用它来生成其他名称,还有其他宝石。
特定于您的问题,您可能会询问是否需要将控制器命名为UserController,因为您的模型名为User。这根本不是必需的,如果它更适合你的目的,你可以称之为其他任何东西。
在这种情况下,您可能需要创建一些控制器,如下所示:
My::AccountController # for e.g.. /my/account
Admin::UsersController # for e.g. /admin/users/1
对于用户,您将自己的用户记录称为“您的帐户”,因此这更有意义。但是,管理员的观点是管理用户记录。您也可以将控制器命名为一件事,并在不同的路线上提供服务。在您的路线文件中,您可以这样做:
namespace :admin do
resources :users, :path => "user-accounts"
end
重申一下,您的型号名称无需与控制器名称匹配。它们仅通过关联命名:UserController被理解为处理用户记录。