I screwed up my example if it matters... should have gone more like:

Class Area < ActiveRecord::Base
  def taxes
    return .1
  end

  def calc_price(amount)
     amount + (amount * determine_taxes)
  end
end

class InnerCity < Area
  def self.find(*args)
    super(args.first,
args.extract_options!.merge(:conditions=>{:postcode=>[2001, 2002]})
  end

  def taxes
     return .5 + new_bridge_tax
  end

end

Area.new.calc_price(3)
InnerCity.new.calc_price(3)

etc.


On Thu, Aug 13, 2009 at 8:28 PM, Sonia Hamilton <[email protected]> wrote:

>  Thanks everyone for all your suggestions. I'm using Ben's method as it works 
> best for my scenario, but I'll file away the techniques for future use.
>
> My old rails doesn't have extract_options, so I broke this up into a few 
> lines:
>
>     options = args.last.is_a?(Hash) ? args.last : {}
>     options = options.merge(:conditions=> ...
>     super(args.first, options)
>
> --
> Sonia Hamilton.
>
>
>
> ben wiseley wrote:
>
> I think it really depends on what's needed.  If you simply need to filter
> rows then, yes, the solution below is good.  But, if you need custom logic
> for InnerCity vs Rural then I'd sub class the models like you originally
> suggested.
>
> Class Area < ActiveRecord::Base
>   def taxes
>     return .1
>   end
>
>   def calc_price(amount)
>      amount + (amount * determine_taxes)
>   end
> end
>
> class InnerCity < ActiveRecord:Base
>   def self.find(*args)
>     super(args.first,
> args.extract_options!.merge(:conditions=>{:postcode=>[2001, 2002]})
>   end
>
>   def taxes
>      return .5 + new_bridge_tax
>   end
>
>   def calc_price(amount)
>      amount + (amount * determine_taxes)
>   end
> end
>
> etc.
>
>
> On Thu, Aug 13, 2009 at 6:27 PM, Dylan Egan <[email protected]> wrote:
>
>>
>> It would go in the model.
>>
>> class Location < ActiveRecord::Base
>>  def self.all_from_inner_city
>>      find(:all, :conditions=>{:postcode=>[2001, 2002]})
>>   end
>> end
>>
>> Location.all_from_inner_city
>>
>> or
>>
>> class Location < ActiveRecord::Base
>>  def self.from_inner_city(*args)
>>     find(args.first,
>> (args.extract_options!.merge(:conditions=>{:postcode=>[2001, 2002]}))
>>  end
>> end
>>
>> Location.from_inner_city(:all, :order => 'id DESC')
>> Location.from_inner_city(:first)
>>
>> Cheers,
>>
>> Dylan.
>>
>>
>>
>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
or Rails Oceania" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rails-oceania?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to