On Jun 8, 2010, at 7:11 , Brian Candler wrote:
> Aside: Rails (or ActiveRecord) expects that the primary key is called=20=

> "id".

Yea, but I'd already rejected that convention.=20

create table Horses (
	horse_id primary-key-thing,
	ranch_id foreign-key-thing
	...
);

create table Ranches (
	ranch_id primary-key-thing,
	...
);

create table HiredHands (
	hiredhand_id primary-key-thing,
	ranch_id primary-key-thing,
	...
);
=09
select * from Horses join Ranches using (ranch_id) join HiredHands using =
(ranch_id);

	as opposed to=20

select * from Horses join Ranches on (Ranch.id =3D ranch_id) join =
HiredHands on (Ranch.id =3D ranch_id);

An ORM that makes the Ruby code cleaner by making the SQL code worse is =
not my friend. I do a LOT of my work directly in SQL.

> Now, I've written applications which connect ActiveRecord to an =
existing=20
> legacy database which doesn't respect Rails conventions, and they work=20=

> fine.=20

Oh, I never doubted it that it could be done. My problem was that the =
overwhelming percentage of available documentation assumes that I =
*won't* be doing it that way, so that I couldn't find the information I =
needed to make it work.=20

> So I'd say:
> * design and build your database how you want
> * connect ActiveRecord to it as above
> * watch it work
> * if you really get stuck, then look at other ORMs (but I can't vouch=20=

> how well they will work with the rest of Rails, at least before Rails =
3)

Um, but I hadn't planned on using Rails at all.=20

After setting up my models in Sequel, I started looking at frameworks. =
Padrino was the frontrunner, but it kept doing what Rails had done to =
me, just not as hard. The online tutorial included a feature that wasn't =
yet part of the version installed by rubygems (the -a switch), the =
'bundle install' command that I was told to invoke without much =
explanation put some presumed-necessary gems in ~/.bundle/blahblahblah =
without telling me (and when I deploy it to the production server, there =
won't BE any home directory, so throwing crap in my home folder isn't =
satisfactory, especially if you don't tell me you're doing it), the =
'admin' sub-app (I still have no idea what it does, I only know that the =
tutorial thought I'd be happier if I installed it) apparently took =
schema-write-access for granted and tried to create an 'accounts' table, =
and when "padrino rake seed" (and again, I still don't know what that =
command was supposed to actually do for me) failed with a cryptic =
database-related error, nobody in the #padrino IRC channel could help me =
resolve it.=20

That's more or less the kind of experience I had when I installed Rails =
and started trying to evaluate it, except that I threw a personal =
"Unable to find solution in current documentation space" error after two =
hours on Padrino, whereas it was about eight hours before I gave up on =
Rails.=20

So then I moved to Ramaze. Two hours of *that,* and I had a browser =
window full of data from my database.=20

Winner: Ramaze.=20


That just left selecting a templating engine. I figured I should be able =
to find at least a couple that would vastly exceed the templating =
functions I was used to from Tango, the DB-to-Web tool that I bought and =
loved back in 1997.=20

I guess 'lightweight' is just too popular an adjective, though, because =
so far, I haven't even found anybody *claiming* to do what it could do, =
never mind living up to such claims. I did find a "paginator" hiding in =
Ramaze as a 'helper' (not in the templater, where I'd expected to find =
it, but that's probably my own error), but it's still going to need a =
lot of customizing to do what I'm looking for.=20

Most of the templating tools out there are variations on a theme by ERB, =
which is pretty much the same as what I had with .idc/.htx files in IIS =
2.0(?) running on Window NT 4.0 back in 1996. Except for haml.=20

I haven't gotten to actually using Haml yet, but it took me about 30 =
seconds to fall in love with it. Barring catastrophic incompatibilities =
with Sequel &/or Ramaze (which seems highly improbable), I'm done =
evaluating, and have finally moved on to developing.=20