प्रति उपयोगकर्ता एक सबडोमेन वेब अनुप्रयोग विकास में काफी आम उपयोग-मामला है। यहाँ कैसे आप यह कर सकते है:
पहले: सुनिश्चित करें कि आपकी 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)
इस पर एक नज़र डालें:
See this page अपने आवेदन में यूआरएल सहायकों का उपयोग कर के बारे में जानकारी के लिए (अनिवार्य रूप से आप
new_user_session_path
के बजायnew_user_session_url
उपयोग करने के लिए और आप इस तरह एक उप डोमेन निर्दिष्ट कर सकते हैं की आवश्यकता होगी http://railscasts.com/episodes/221-subdomains-in-rails-3 –