Here is one way to solve you problem. Its slightly different from
what you wanted as far as mapping to the url you want but its another
way to use the subdomain as account key:
In application.rb
The filters added to this controller will be run for all
controllers in the application.
Likewise will all the methods added be available for all controllers.
require ‘user_system’
require ‘account_location’
class ApplicationController < ActionController::Base
include UserSystem
include AccountLocation
before_filter :setup_environment, :except =>
[:new, :create, :signup]
protected
def setup_environment
if @account = Account.find_by_company_abbrev
(request.subdomains.first)
@session[‘account_id’] ||= @account.id
else
redirect_to :controller => ‘user’, :action => ‘login’
end
end
end
in lib/account_location
module AccountLocation
def self.included(controller)
controller.helper_method
(:account_domain, :account_host, :account_url)
end
protected
def default_account_subdomain
@account.company_abbrev if @account && @account.respond_to?
(:company_abbrev) || “default”
end
def account_url(account_subdomain = default_account_subdomain,
use_ssl = request.ssl?)
(use_ssl ? “https://” : “http://”) + account_host
(account_subdomain)
end
def account_host(account_subdomain = default_account_subdomain)
account_host = ""
account_host << account_subdomain + "."
account_host << account_domain
end
def account_domain
account_domain = ""
account_domain << request.subdomains[1..-1].join(".") + "." if
request.subdomains.size > 1
account_domain << request.domain + request.port_string
end
end
With this method I have an Account model that stores the username as
the subdomain key. this before filter gets run on each request and
takes the subdomain from the url and grabs the user that matches it.
Then it sets session[:account_id] to @account.id unless it is already
set. The rest of the methods in the AccountLocation module are just
for creating the correct links that always include the subdomain.
So with this method, instead of redirecting joe.example.com to
example.com/user/joe, the url just always stays joe.example.com
whenever they are logged in. Much simpler then what you want to do I
think
Cheers-
-Ezra Z.
Yakima Herald-Republic
WebMaster
509-577-7732
[email protected]