Overriding the has_many accessor

Shop: has_many :workers   Worker: belongs_to :shop

  s = Shop.find(:first)

Calling s.workers.create(...) works great. The problem is, I want s.workers to only return CURRENT workers.

    :conditions => { :current => true }

Here's my attempt at fixing it:

  alias all_workers workers   def workers     all_workers.find(:conditions => { :current => true })   end      This causes s.workers to correctly return only current workers. The problem is, s.workers.create is now broken ("can't call 'create' on an array"). Also, s.workers_count will be wrong.

Is there any way to override Shop#workers so that it returns the correct information everywhere?

Thanks,

    - Scott

Scott Bronson wrote:

  Shop: has_many :workers   Worker: belongs_to :shop

  s = Shop.find(:first)

Calling s.workers.create(...) works great. The problem is, I want s.workers to only return CURRENT workers.

    :conditions => { :current => true }

class Shop < AR::B    has_many :all_workers    has_many :workers, :conditions => 'workers.current = true' end

Mark Reginald James <mrj@...> writes:

Scott Bronson wrote: > Shop: has_many :workers > Worker: belongs_to :shop > > s = Shop.find(:first) > > Calling s.workers.create(...) works great. The problem is, I want > s.workers to only return CURRENT workers. > > :conditions => { :current => true }

class Shop < AR::B    has_many :all_workers    has_many :workers, :conditions => 'workers.current = true' end

How about this:

class Shop < AR::B   has_many :workers do     def current       find(:all, :conditions => 'workers.current = true')     end   end end

This gives you @shop.workers and @shop.workers.current

Gareth