Hi Dominic,

Ah – everything is much more clear now.  What you're describing is a
fairly core behavior of Rails.  Associations are indeed the right way
to go here.

For example, say you have an extension called Ages, which you would
create with "script/generate extension Ages".  In the extension, you
have a model, AgeGroup (created with "script/generate extension_model
Ages AgeGroup").

The create_table part of the migration for AgeGroup might look
something like (note that none of these examples have been tried yet,
so I may have minor syntax errors):

create_table do |t|
  t.column :min, :integer
  t.column :max, :integer
end

and the class might look like:

class AgeGroup < ActiveRecord::Base
  has_many :pages
end

and somewhere else (either <extension dir>/app/models or <extension
dir>/lib) have something like:

module PageExtension
  belongs_to :age_group
end
Page.send(:include, AgePageExtension)

You should explicitly require this file in your age_extension.rb.

Of course, you'll need a migration to alter pages to have an
:age_group_id column (and you'll probably want an index on that too).

You'll also need a controller for Admin-ing the age_groups table.  It
should be simple CRUD operations, which other extensions cover pretty
well.

After you understand that, it's time to move on to something a little
more complicated: To actually display the information, my
recommendation is to do something similar to the ArchivePages.  Have
one page that lists all of the age groups with links to a child page
for each age group.  The child pages would actually be a single
virtual page that gets the age-group specified in the URL.  Although
code-blindness will hurt here, I recommend you look at
radiant/app/models/archive_page.rb,
radiant/app/models/archive_*_index_page.rb and
radiant/lib/archive_index_tags_and_methods.rb for an idea of what I'm
talking about.

The most important things are that ArchivePage overrides child_url
(the method responsible for making a url for a page's child) and
find_by_url (the method responsible for returning a Page to render).
Also, tags are a good thing for dynamic content (such as a list of
pages for a certain age group).

Hope this helps,
Andrew


On Dec 10, 2007 7:05 PM,  <[EMAIL PROTECTED]> wrote:
> Hi Andrew,
>
> Thank you for replying, I've been looking through the extensions as
> you say, but can't really see anything close enough to what I want to
> do in this particular case (from my limited knowledge). I think one of
> the closest is perhaps Author, where the ID of the author name gets
> entered in to the page table under the created_by column and the
> Author Name gets returned from the ID on the pages table by it tag.
> Its the connection between the local id and the foreign name that I
> think I need to look up.
>
> I'm a bit code-blind after all the code I've been looking at and
> learning over the past few day's, however I now think I have to
> investigate associations and belongs_to in order to do the above for
> my extension. If I'm heading down the wrong path someone please tell
> me! Hopefully I'll have a fresh look at it tomorrow, I'm hoping its
> just a simple concept I have yet to digest...
>
> I'm voluntarily building a site for a local theatre company as a
> project to learn ruby/rails/radiant, so I'm learning as I go (in at
> the deep end), the min_age and max_age aren't really connected to the
> other date extension I am doing. This one is just going to be a used
> as an aid to find pages for particular age groups (and to show those
> values on the particular events). I don't think having two values will
> prove to be the final/best solution, as a single multiple select
> option box may be a better method to achieve the same ends, but this
> part is working passably for now.
>
> The previous example which you so kindly helped with was based on
> Sean's great Schedular extension. It adds start and end dates for
> event pages (which are slightly different from publish dates in my
> case), it also enables those values to be displayed on the page and to
> order by them. As the information is stored directly on the page table
> it is relatively easy for me to access it directly, the trouble I am
> currently facing is matching a ID of one thing to a value in a
> different DB table.
>
> If anyone can point a good direction to look at for research that
> would be great.
>
> Thanks once again
>
>
>
> On 10 Dec 2007, at 22:41, Andrew O'Brien wrote:
>
> > I'm not quite sure what you're trying to do.  My recommendation is to
> > check http://wiki.radiantcms.org/Thirdparty_Extensions for existing
> > extensions.  Even if they don't have what you want, there's usually
> > some good examples.
> >
> > Incidentally, are you trying to do something like delayed publishing,
> > where a page has to be a certain age before it's visible, and it
> > expires after a certain age?  Or am I completely misunderstanding your
> > age_min and age_max examples...  If that's what you're trying to do,
> > check out the Scheduler extension.
> >
> > -Andrew
> >
> > On Dec 10, 2007 6:41 AM,  <[EMAIL PROTECTED]> wrote:
> >> Hello again,
> >>
> >> I'm attempting to write a couple of extensions, and have what is
> >> hopefully a quick question.
> >>
> >> I have an extension that creates a table for age and extends pages
> >> with two columns age_min, and age_max. From the edit page I can post
> >> the id's of age into age_min and age_max, and from the actual page
> >> can
> >> return the values of those id's. However, I would like to return the
> >> name value connected to those id's in age and not the actual id
> >> itself.
> >>
> >> What would be a good example to look at, in order to achieve the
> >> above?
> >>
> >> Many thanks,
> >>
> >> Dominic
> >> _______________________________________________
> >> Radiant mailing list
> >> Post:   [email protected]
> >> Search: http://radiantcms.org/mailing-list/search/
> >> Site:   http://lists.radiantcms.org/mailman/listinfo/radiant
> >>
> > _______________________________________________
> > Radiant mailing list
> > Post:   [email protected]
> > Search: http://radiantcms.org/mailing-list/search/
> > Site:   http://lists.radiantcms.org/mailman/listinfo/radiant
>
> _______________________________________________
> Radiant mailing list
> Post:   [email protected]
> Search: http://radiantcms.org/mailing-list/search/
> Site:   http://lists.radiantcms.org/mailman/listinfo/radiant
>
_______________________________________________
Radiant mailing list
Post:   [email protected]
Search: http://radiantcms.org/mailing-list/search/
Site:   http://lists.radiantcms.org/mailman/listinfo/radiant

Reply via email to