Thank you Andrew for all this,

After hours of struggling to grasp this core concept I think finally  
have it and your post arrived at just the time to reassure me I  
finally got it right - the joys of learning! - it's all looking a lot  
simpler now! I think I got hung up on belongs_to being and has_many  
being the wrong way around in my head and went in every wrong  
direction from there.

I think my next goal is to use a single multiple select box in the  
admin area to try and get the values returned as the selected options,  
which I think might need a different type of association.

But, yes, once the bug's has really bitten, I should imagine  
developing it in a way very similar to what you describe - perhaps  
even widening it to a more general and very simple page tagging  
engine. (maybe)

Many many thanks for your kind help,

Dominic


On 11 Dec 2007, at 14:58, Andrew O'Brien wrote:

> 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

_______________________________________________
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