2010-09-26 20 views
5

मैं एक "संदर्भ" प्रणाली GitHub द्वारा प्रयोग किया जाता के समान लागू करने के लिए कोशिश कर रहा हूँ पर आधारित है। उदाहरण के लिए, एक पोस्ट को उपयोगकर्ता या कंपनियों उपयोगकर्ता है कि क्या करने के लिए उपयोगकर्ता के आधार पर के अंतर्गत आता है "उपयोगकर्ता" संदर्भ या एक संदर्भ है कि कंपनियों में से एक के लिए संदर्भित करता है में से एक से संबंधित बनाए जा सकते हैं।रेल 3 मार्ग संदर्भ

इस के एक हिस्से के रूप में, मैं उपयोगकर्ता के वर्तमान संदर्भ के आधार पर रूटिंग करने में सक्षम होना चाहता हूं। उदाहरण के लिए, यदि उपयोगकर्ता अपने स्वयं के संदर्भ में, /dashboard चाहिए users/show के लिए रास्ते में है, लेकिन वे आईडी 35 है, तो /dashboard चाहिए मार्ग को companies/35/dashboard साथ कंपनी के लिए संदर्भ में कर रहे हैं।

मैं कर सकता इस तरह के निर्णय लेने के लिए जिम्मेदार एक विशेष नियंत्रक, जैसे context#dashboard के लिए रास्ते में /dashboard जो फिर एक redirect_to कर सकता है, लेकिन यह बहुत सही नहीं लगता है (शायद इसलिए कि हम तर्क यह है कि रेल मार्ग मॉड्यूल ले जा रहे हैं चाहिए इसके लिए ज़िम्मेदार रहें और इसे नियंत्रक के पास ले जाएं?)

रेल 3 में इस समस्या को हल करने का सही तरीका क्या होगा?

+0

मैं समझता हूँ कि आप एक छद्म रूटर विकल्प के रूप में डैशबोर्ड नियंत्रक के साथ सही नहीं लग रहा है, लेकिन रूटर जानकारी द्वारा कुकीज़/पैरामीटर पारित किया से एक संदर्भ/सत्र मॉडल पढ़ने होने बहुत अजीब लगता है। – hellvinz

उत्तर

2

मुझे अंत में मेरी समस्या का समाधान मिला जो मुझे पसंद है। यह मेरे मूल प्रश्न से यूआरएल का उपयोग करेगा।

सबसे पहले, एक सत्र-संग्रहीत Context उद्देश्य यह है कि संग्रहीत करता है उपयोगकर्ता एक "उपयोगकर्ता" संदर्भ या एक "कंपनी" के संदर्भ में है कि क्या यह मान। यदि उपयोगकर्ता "कंपनी" संदर्भ में है, तो उस कंपनी की आईडी जो वे काम कर रहे हैं वह ऑब्जेक्ट में भी है। हम get_context नाम के एक सहायक के माध्यम से संदर्भ प्राप्त कर सकते हैं और हम current_user के माध्यम से वर्तमान में लॉग-इन उपयोगकर्ता प्राप्त कर सकते हैं।

config/routes.rb:

MyApplication::Application.routes.draw do 
    get "dashboard" => "redirect", :user => "https://stackoverflow.com/users/show", :company => "/companies/:id/dashboard" 
end 
अब

, app/controllers/redirect_controller.rb:

class RedirectController < ApplicationController 
    def method_missing(method, *args) 
    user_url = params[:user] 
    company_url = params[:company] 
    context  = get_context 

    case context.type 
    when :user 
     redirect_to user_url.gsub(":id", current_user.id.to_s) 
    when :company 
     redirect_to company_url.gsub(":id", context.id.to_s) 
    end 
    end 
end 

यह बहुत आसान रीडायरेक्ट जहां के लिए वास्तविक यूआरएल रखने के लिए

अब, हम हमारे मार्गों के रूप में तो सेट वे हैं (routes.rb फ़ाइल में!) और है कि डेटा एक सूखी नियंत्रक करने के लिए पारित कर दिया है। मैं भी में मार्ग में वर्तमान संदर्भ वस्तु की आईडी पारित कर सकते हैं।

0

आपका दृष्टिकोण मेरे लिए सबसे अच्छा तरीका प्रतीत होता है। और कुछ और अधिक अव्यवस्थित और बहुत मानक नहीं होगा।

+0

ऐसा लगता है कि यह एक टिप्पणी होना चाहिए। –

संबंधित मुद्दे