2015-02-26 13 views
7

मैं डेविस को अपनी साइट पर सबडोमेन बनाना चाहता हूं।डिज़ाइन पंजीकरण पर एक सबडोमेन बनाएं

  1. कंपनी:: एक Company साइट पर सीधे रजिस्टर कर सकते हैं, और प्रवेश करने के बाद, अपने कर्मचारियों को आमंत्रित कर सकते हैं

    अभी, मैं दो मॉडल है। जब कंपनी पंजीकृत होती है, तो मैं एक अद्वितीय सबडोमेन बनना चाहता हूं (उदा। Example.com => techcraz.example.com।)

  2. कर्मचारी: Employee केवल तभी पंजीकरण कर सकता है जब उन्हें आमंत्रण लिंक प्राप्त हो।

मुझे क्या करना चाहते हैं:

  • पंजीकरण पृष्ठ के रूप में मुख्य डोमेन।
  • Companies और Employees दोनों के लिए पृष्ठ में एक एकल साइन इन करें।
  • साइन इन करते समय उन्हें एक डोमेन नाम प्रदान करना होगा, फिर उन्हें उस सबडोमेन (जैसे techcraz.example.com/signin) के लिए साइन इन पेज पर रीडायरेक्ट किया जाना चाहिए।
  • जब कोई URL दर्ज नहीं होता है, तो उन्हें चाहिए पंजीकरण पृष्ठ पर रीडायरेक्ट किया जाना चाहिए।

मैं रेल के लिए नया हूं। कृपया सहायता कीजिए!

अग्रिम धन्यवाद!

+0

इस पर एक नज़र डालें:

See this page अपने आवेदन में यूआरएल सहायकों का उपयोग कर के बारे में जानकारी के लिए (अनिवार्य रूप से आप new_user_session_path के बजाय new_user_session_url उपयोग करने के लिए और आप इस तरह एक उप डोमेन निर्दिष्ट कर सकते हैं की आवश्यकता होगी http://railscasts.com/episodes/221-subdomains-in-rails-3 –

उत्तर

9

प्रति उपयोगकर्ता एक सबडोमेन वेब अनुप्रयोग विकास में काफी आम उपयोग-मामला है। यहाँ कैसे आप यह कर सकते है:

पहले: सुनिश्चित करें कि आपकी Users table है एक :name column (मुझे लगता है कि वसीयत डिफ़ॉल्ट रूप से करता है - न आप अपने डेटाबेस को यह स्तंभ जोड़ने के लिए rails g migration AddNameToUsers name:string चला सकते हैं)।

इस User.name को उपडोमेन के रूप में उपयोग करने के लिए हमें यह सुनिश्चित करने की आवश्यकता होगी कि इसमें केवल अल्फान्यूमेरिक वर्ण (वैकल्पिक अंडरस्कोर के साथ) शामिल हों। हम नाम को अधिकतम 32 वर्णों तक भी सीमित कर देंगे। अंत में, हम नहीं चाहते हैं कि उपयोगकर्ता "www" जैसे नाम चुन सकें जिसके परिणामस्वरूप "http://www.myapp.com" जैसे यूआरएल होंगे। वैकल्पिक रूप से

validates_format_of :name, with: /^[a-z0-9_]+$/, 
    message: "must be lowercase alphanumerics only" 

validates_length_of :name, maximum: 32, 
    message: "exceeds maximum of 32 characters" 

validates_exclusion_of :name, in: ['www', 'mail', 'ftp'], 
    message: "is not available" 

:: यहाँ app/models/user.rb के लिए सत्यापन है अपने db/seeds.rb संशोधित (इसलिए यह परीक्षण उन जब आप डेटाबेस को प्रारंभ बनाता है):

user = User.create! :name => 'myname', :email => '[email protected]', 
    :password => 'password', :password_confirmation => 'password' 

हम के लिए एक प्रोफाइल पेज प्रदर्शित करेंगे एक उपयोगकर्ता जब किसी को एक उप डोमेन किसी मौजूदा उपयोगकर्ता app/controllers/profiles_controller.rb से मेल खाता है के साथ एक यूआरएल में प्रवेश करती है:

class ProfilesController < ApplicationController 
    def show 
    @user = User.where(:name => request.subdomain).first || not_found 
    end 

    def not_found 
    raise ActionController::RoutingError.new('User Not Found') 
    end 
end 

यहाँ देखनेके लिए एक उदाहरण फ़ाइल है:

<h1>Profile</h1> 
<h3><%= @user.name %></h3> 
<h3><%= @user.email %></h3> 

आखिरकार हमें सबडोमेन के लिए रूटिंग लागू करने की आवश्यकता है।इस तरह एक कक्षा बनाएं:

class Subdomain 
    def self.matches?(request) 
    case request.subdomain 
    when 'www', '', nil 
     false 
    else 
     true 
    end 
    end 
end 

सुनिश्चित करें कि इस वर्ग के autoloaded है जब आवेदन config/application.rb शुरू होता है:

config.autoload_paths += %W(#{config.root}/lib) 

सुनिश्चित करें कि आपका routes.rb फ़ाइल निम्न मार्गों में शामिल हैं:

devise_for :users 
resources :users, :only => :show 
constraints(Subdomain) do 
    match '/' => 'profiles#show' 
end 

आप तो आपके प्रोफाइल नियंत्रक के लिए rails generate का उपयोग किया गया - यह सुनिश्चित करें कि आप get "profiles/show" मार्ग हटा दें।

root_url(:subdomain => @subdomain) 
+0

आपके लिए कोई फायदे? वैकल्पिक क्यों? –

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