rails项目中是否需要以下命名约定?

时间:2011-12-19 17:57:50

标签: ruby-on-rails

我的项目名称是clog,所以我将我的模型和控制器命名为:Clog::User Clog::Userscontroller

此命名约定是强制性的吗?

2 个答案:

答案 0 :(得分:2)

不,在传统的Rails项目中,这不是必需的。只需按常规方式命名模型和控制器,例如User或UsersController。

另一件事是,当您的项目规模扩大时,您可能需要将模型组织到子模块中。一种方法是使用app关注扩展模型,例如herehere

至于组织控制器,一种方法是在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被理解为处理用户记录。