[Maypole] the subtleties of many-to-many stringification
Seth Gordon
sethg@ropine.com
Thu, 02 Dec 2004 16:27:08 -0500
>>...and everything Just Worked, except for one small detail: the
>>"authors" list on the ...library/titles/view/#### page just has the
>>authors' names, and not the relationships.
>>
>
>
> Isn't this what you want since you looking at the title already?
If a book is *written by* Smith and *edited by* Jones, the
title_author_rel table will record "by" and "ed.", respectively, in the
relationship field.
When I do my funky dance with JeevesLibrary::TitleAuthorRel::process, a
titles/view page will show me
GREAT AMERICAN NOVEL
...
Authors
* by Smith
* ed. Jones
whereas if I just set up all the relationships in their default
fashions, I get
GREAT AMERICAN NOVEL
...
Authors
* Smith
* Jones
>>(a) why I can't add :Exported methods, dammit
Aha! It has to do with the order of module loading. (All of my model
classes are in the JeevesLibrary.pm file, which may be a contributing
factor.) If I wrap the call to JeevesLibrary->setup in a BEGIN block,
then I can add the exported methods.
Now I can implement a search method.....
>>(b) if there is a more elegant way to do the same thing
>>
>
>
> Do the object switcheroo in the view Template instead, maybe or just modify the
> template.
Hmm. My gut feeling is that this kind of mangling should stay in the
model, but I'm not sure I can really justify that as more than a
pedantic desire to see how much I can do without touching the default
templates.
I suspect that the OO-philosophically-ideal way to handle this would be
to create a new subclass of Class::DBI::Relationship -- perhaps calling
it Class::DBI::Relationship::HasAWithQualifier -- and use that to
describe the relationship between title_author_rel and authors.
> Isn't authors an array possibly? I can't see how view template handles that as
> it seems to print the column. Does TT2 automatically print all elements of
> array?
One-to-many relationships in the "view" page are handled by the
view_related macro, which the view template calls.
--
// seth gordon // sethg@ropine.com // http://dynamic.ropine.com/yo/ //