I’m hoping to find someone who realizes the implications of this
design strategy. I am attempting to build an application that access a
common monolithic database but each user has a ‘scope’ so they only
see their data…
My strategy is to create an http request that looks like
project.controller.action.keyvalue and pass this throughout the
application. The “Project” term is used to describe a distinct data
scope that one user or a group would maintain.
I expect we’d make http calls like http:
\project.controller.action.keyvalue and database calls like:
link_to: #{table.row.columname}
:Project => project
:Controller=>controller
:Action=> action
:Id => id
The patriarch of all RonR programs written by DHH (Basecamp) must
utilize a strategy similar to this as they are running the same
generic program, but accessing distinct data from one monolithic
database.
When Basecamp passes an http: request it’s got to hold inside this
package the group database, user, controller, action and value. Does
anyone know the basic architecture of how this is accomplished?
I found one clue to this question today when looking at the the
ActionPack API and in it, DHH wrote:
Routing makes pretty urls incredibly easy
map.connect ‘clients/:client_name/:project_name/:controller/:action’
Accessing /clients/37signals/basecamp/project/dash calls
ProjectController#dash with
{ “client_name” => “37signals”, “project_name” => “basecamp” } in
params[:params]
From that URL, you can rewrite the redirect in a number of ways:
redirect_to(:action => “edit”) =>
/clients/37signals/basecamp/project/dash
redirect_to(:client_name => “nextangle”, :project_name => “rails”)
=>
/clients/nextangle/rails/project/dash
I am willing to pay for someone to teach me how this is done.
Thank you,
David
[email protected]