7

में एक व्यवस्थापक निर्देशिका बनाना अब मैं कुछ हफ्तों के लिए वेबसाइट के लिए सीएमएस बैकएंड विकसित कर रहा हूं। विचार बैकएंड में सबकुछ तैयार करना है ताकि यह डेटाबेस और जानकारी का प्रबंधन कर सके जो मुख्य वेबसाइट पर प्रदर्शित होगा।रेल

अभी तक, मेरे पास वर्तमान में सामान्य रेल एमवीसी संरचना में मेरा सभी कोड सेटअप है। तो उपयोगकर्ता व्यवस्थापक/उपयोगकर्ता और वीडियो/वीडियो है।

मेरी योजनाएं इसके लिए कोड लेना और इसे एक/व्यवस्थापक निर्देशिका में ले जाना है। तो उपरोक्त दो नियंत्रकों को/व्यवस्थापक/उपयोगकर्ता और/व्यवस्थापक/वीडियो द्वारा एक्सेस करने की आवश्यकता होगी। मुझे यकीन नहीं है कि कैसे बर्बाद करना है (व्यवस्थापक को उपसर्ग के रूप में जोड़ना) और न ही मुझे तर्क है कि तर्क को कैसे प्रबंधित किया जाए। मैं जो करने की सोच रहा हूं वह एक अतिरिक्त 'मध्यम' नियंत्रक स्थापित कर रहा है जो किसी भी तरह से/व्यवस्थापक निर्देशिका तक पहुंचने पर एप्लिकेशन नियंत्रक और लक्षित नियंत्रक के बीच घोंसला हो जाता है। इस तरह, किसी भी अतिरिक्त झंडे और ओवरलोडेड विधियों को केवल/व्यवस्थापक अनुभाग के लिए बनाया जा सकता है (मुझे विश्वास है कि मैं इसके लिए भी फ़िल्टर का उपयोग कर सकता हूं)।

यदि यह काम करना था, तो अगला मुद्दा दृश्य तर्क को अलग करेगा (लेकिन यह फ़ोल्डरों का नाम बदल जाएगा और इसी तरह)।

या तो मैं इसे इस तरह से करता हूं या मेरे पास दो रेल उदाहरण हैं जो उनके बीच एमवीसी कोड साझा करते हैं (और मुझे डेटाबेस भी लगता है), लेकिन मुझे डर है कि बहुत सारी डुप्लिकेशन्स त्रुटियां पैदा होंगी।

किसी भी विचार के बारे में मुझे यह कैसे करना चाहिए?

बहुत धन्यवाद!

उत्तर

6

यदि आपको प्रत्येक संसाधन के लिए दो नियंत्रक होने पर कोई फर्क नहीं पड़ता है, तो आपके पास एक अलग "व्यवस्थापक" नामस्थान हो सकता है। मुझे यह पसंद है, क्योंकि व्यवस्थापक अनुभाग सार्वजनिक से बिल्कुल अलग है। व्यवस्थापक नियंत्रक सभी सीआरयूडी कार्यों को लागू करते हैं, जबकि सार्वजनिक लोग केवल शो और इंडेक्स क्रियाओं को लागू करते हैं।

routes.rb:

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

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

आपका नियंत्रक हो सकता है कुछ की तरह:

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 

namespaced नियंत्रकों और विचारों एप्लिकेशन/नियंत्रकों और एप्लिकेशन/विचारों निर्देशिका के अंदर अपने स्वयं के उपनिर्देशिका है।यदि आप form_for सहायक का उपयोग करते हैं, तो आपको इसके पैरामीटर को संशोधित करने की आवश्यकता है:

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

आप 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 } 

क्या :requirements वास्तव में यहाँ होता है, क्योंकि मैं इसे एक स्थिर और नहीं एक regex दिया था, जब द्वारा ही पहुंचा params[:is_admin] जोड़ने के लिए बस है यह मार्ग तो आप इस मान को अपने नियंत्रक में देख सकते हैं, और अलग-अलग विचार प्रस्तुत कर सकते हैं, या यदि आप दो विचार समान हैं तो आप इसे दृश्य में देख सकते हैं। गैर-व्यवस्थापक संस्करणों पर false के साथ आवश्यकता को शामिल करना महत्वपूर्ण है अन्यथा लोग केवल /users/?is_admin=true का उपयोग कर सकते हैं।

:name_prefix मार्ग नाम संपादित करता है, इसलिए आपके पास उदा। admin_video_path(123) साथ ही video_path(123)

रेल 2.3.5 पर परीक्षण किया गया, अन्य संस्करण भिन्न हो सकते हैं। रीस्टफुल मार्गों पर उपलब्ध विकल्पों के बारे में अधिक जानकारी के लिए, ActionController::Resources docs देखें।

+0

धन्यवाद दोस्तों। मुझे ठीक इसी की आवश्यकता थी। – matsko