Has_many :through failed << returning false


#1

Hi All,

I’ve got a situation where I want a has_many :through association to
behave
somewhat like a normal has_many when << is called on the association.
ie I
would like it to return false instead of throwing an exception.

With some inspiration from http://blog.hasmanythrough.com I’ve come up
with,

class Container < AR:B

has_many :container_items
has_many :items, :through => :container_items do
def <<( item )
begin
self.concat item
rescue ActiveRecord::RecordInvalid => e
@owner.errors.add( :item, e)
false
end
end
end

Is there anything that stands out as a stark issue with doing this? I
would
like to call owner in some other way but I have not found how to get at
@owner with a method.

The join model has only timestamps in addition to the two f’keys

Any comments, insights, crits etc are welcome.

I’ve extracted this into a plugin if anyone would like to try it. I
can’t
make any guarantees though.

http://svn.devjavu.com/liquid/has_many_through_append_fix

Cheers
Daniel


#2

Daniel ----- wrote:

I’ve got a situation where I want a has_many :through association to
behave
somewhat like a normal has_many when << is called on the association.
ie I
would like it to return false instead of throwing an exception.

With some inspiration from http://blog.hasmanythrough.com I’ve come up
with,

class Container < AR:B

has_many :container_items
has_many :items, :through => :container_items do
def <<( item )
begin
self.concat item
rescue ActiveRecord::RecordInvalid => e
@owner.errors.add( :item, e)
false
end
end
end

Is there anything that stands out as a stark issue with doing this? I
would
like to call owner in some other way but I have not found how to get at
@owner with a method.

Looks like it might work to me. You can get the association owner in an
extension with the proxy_owner method.


Josh S.
http://blog.hasmanythrough.com


#3

On 4/14/07, Josh S. removed_email_address@domain.invalid wrote:

Looks like it might work to me. You can get the association owner in an
extension with the proxy_owner method.


Josh S.
http://blog.hasmanythrough.com

Thanx Josh,

I was hopeing you might take a look. I’ll have a go at using an
extension
for this when I get home.

Cheers