Question

J'ai développé le backend CMS pour un site Web pour quelques semaines maintenant. L'idée est de tout métier dans le backend premier afin qu'il puisse gérer la base de données et des informations qui seront affichées sur le site principal.

A partir de maintenant, j'ai actuellement toute ma configuration de code dans les rails structure normale MVC. Ainsi, les utilisateurs admin est / utilisateurs et vidéos est / vidéos.

Mes plans sont de prendre le code pour cela et le déplacer vers un répertoire / admin. Ainsi, les deux contrôleurs seraient ci-dessus doivent être accessibles par / admin / utilisateurs et / admin / vidéos. Je ne sais pas comment le todo ruote (en ajoutant l'admin / comme préfixe) et je ne suis sûr de la façon de gérer la logique. Ce que je pense à faire est la mise en place d'un contrôleur « milieu » supplémentaire qui obtient en quelque sorte niché entre le ApplicationControler et le contrôleur lorsque le répertoire targetted / admin est accessible. De cette façon, les drapeaux supplémentaires et les méthodes surchargées peut être donné naissance à la section / admin seulement (je crois que je pourrais utiliser un filtre trop pour cela).

Si cela était au travail, la question suivante serait la logique de séparation de vues (mais serait tout simplement renommer les dossiers et ainsi de suite).

Soit je le fais de cette façon ou j'ai deux instances de rails qui partagent le code MVC entre eux (et je suppose que la base de données aussi), mais je crains que cela causerait beaucoup d'erreurs de duplication.

Toutes les idées sur la façon dont je devrais prendre?

Un grand merci!

Était-ce utile?

La solution

Si vous ne dérange pas d'avoir deux contrôleurs pour chaque ressource, vous pourriez avoir un espace de noms « admin » séparé. Je l'aime de cette façon, puisque la section d'administration est tout à fait différent de celui du public. contrôleurs administration toutes les actions à mettre en œuvre CRUD, alors que les publics mettent en œuvre ne montrent et les actions de l'indice.

routes.rb:

map.namespace :admin do |admin|
  admin.resources :users
  admin.resources :videos
end

map.resources :videos, :only => [:index, :show]

Vos contrôleurs pourrait être quelque chose comme:

class VideosController < PublicController; end

class Admin::VideosController < Admin::AdminController; end

class PublicController < ApplicationController
  layout 'public'
  before_filter :load_public_menu
end

class Admin::AdminController < ApplicationController
  layout 'admin'
  before_filter :login_required, :load_admin_menu
end

contrôleurs et points de vue ont d'espace de nom leur propre répertoire dans les app / contrôleurs et app / répertoires vues. Si vous utilisez l'assistant form_for, vous devez modifier ses paramètres:

form_for [:admin, @video] do |f|

Autres conseils

Vous pouvez le faire sans un contrôleur supplémentaire, relativement facilement dans config/routes.rb:

# non-admin routes
# your args could include :only => [:index,:show] for the non-admin routes
# if you wanted these to be read-only
map.resources :users,  ...your args..., :requirements => { :is_admin => false }
map.resources :videos, ...your args..., :requirements => { :is_admin => false }
# admin routes
map.resources :users,  ...your args..., :path_prefix => '/admin', \
    :name_prefix => 'admin_', :requirements => { :is_admin => true }
map.resources :videos, ...your args..., :path_prefix => '/admin', \
    :name_prefix => 'admin_', :requirements => { :is_admin => true }

Qu'est-ce que :requirements ne fait ici, parce que je lui ai donné une constante et non une expression régulière, est juste d'ajouter params[:is_admin] quand on y accède par cette voie. Ainsi, vous pouvez vérifier cette valeur dans votre contrôleur, et rendre différents points de vue, ou vous pouvez simplement vérifier dans la vue si les deux points de vue sont similaires. Il est important d'inclure l'exigence avec false sur les versions non-admin sinon les gens peuvent utiliser simplement /users/?is_admin=true.

Le :name_prefix édite les noms de route, de sorte que vous avez par exemple admin_video_path(123) ainsi que video_path(123).

Testé sur Rails 2.3.5, d'autres versions peuvent différer. Pour en savoir plus sur les options disponibles sur les itinéraires RESTful, consultez le ActionController :: Ressources docs .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top