Требуется ли следующее соглашение об именах в проекте rails? - PullRequest
4 голосов
/ 19 декабря 2011

Мой проект называется clog, поэтому я назвал свои модели и контроллеры так: Clog::User Clog::Userscontroller.

Является ли это соглашение об именах обязательным?

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Нет, в обычном проекте Rails это не обязательно. Просто назовите ваши модели и контроллеры обычным способом, например, User или UsersController.

Другое дело, что когда ваш проект увеличивается в размерах, вам может понадобиться организовать ваши модели в подмодули. Один из подходов состоит в том, чтобы расширить ваши модели проблемами приложения, как показано, например, здесь или здесь .

Что касается организации контроллеров, один из подходов заключается в создании модуля в каталоге lib, который затем включается в ApplicationController, например, так:

In 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 Engine, вы можете следовать некоторым соглашениям об именах. Хорошим примером Rails Engine является forem .

0 голосов
/ 19 декабря 2011

Да, соблюдение соглашения об именах очень помогает, потому что рельсы используют его не только для генерации других имен, но и других драгоценных камней.

В зависимости от вашего вопроса, вы можете спросить, нужно ли вам называть контроллер 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 предназначен для обработки записей пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...