# Association extension method

**URL:** <https://www.ruby-forum.com/t/association-extension-method/174584>\
**Category:** Rails\
**Created:** [August 29, 2009, 1:42am UTC](https://www.ruby-forum.com/t/association-extension-method/174584 "2009-08-29T01:42:26Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![bryan-ash](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/59ef9b/32.png) [@bryan-ash](https://www.ruby-forum.com/u/bryan-ash)\
**Post date:** [August 29, 2009, 1:42am UTC](https://www.ruby-forum.com/t/association-extension-method/174584/1 "2009-08-29T01:42:26Z")

</div>

In my application a user working at a dropzone can manipulate  
transactions against customer accounts. Here’s my models:

class Transaction \< ActiveRecord::Base  
belongs\_to :account  
end

class Account \< ActiveRecord::Base  
belongs\_to :dropzone  
has\_many :transactions  
end

class Dropzone \< ActiveRecord::Base  
has\_many :transactions, :through =\> :accounts do  
def limited\_to(transaction)  
scope = Transaction.scoped({ :conditions =\>  
[‘account.dropzone\_id = ?’, proxy\_owner.id],  
:joins =\> :account })  
scope  
end  
end  
end

In a controller, I’d like to write:

current\_dropzone.transactions.limited\_to(@transaction)

but, I get the error:

```
  RuntimeError: ERROR C42P01 Mmissing FROM-clause entry for

```

table “account” P122 Fparse\_relation.c L2017  
RwarnAutoRange: SELECT “transactions”.\* FROM “transactions” INNER  
JOIN “accounts” ON “accounts”.id = “transactions”.account\_id WHERE  
(account.dropzone\_id = 2) (ActionView::TemplateError)

I’ve searched all over and tried many options but can’t figure this  
out, I hope someone can help.

Many thanks,  
Bryan

---

<div class="post-metadata">

**Author:** ![bryan-ash](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/59ef9b/32.png) [@bryan-ash](https://www.ruby-forum.com/u/bryan-ash)\
**Post date:** [August 29, 2009, 2:20am UTC](https://www.ruby-forum.com/t/association-extension-method/174584/2 "2009-08-29T02:20:29Z")

</div>

Hi –

On Fri, 28 Aug 2009, Bryan A. wrote:

> has\_many :transactions  
> end
> 
> class Dropzone \< ActiveRecord::Base  
> has\_many :transactions, :through =\> :accounts do  
> def limited\_to(transaction)  
> scope = Transaction.scoped({ :conditions =\>  
> [‘account.dropzone\_id = ?’, proxy\_owner.id],

That should be accounts (plural) I suspect.

David

–  
David A. Black / Ruby Power and Light, LLC / [http://www.rubypal.com](http://www.rubypal.com)  
Ruby/Rails training, mentoring, consulting, code-review  
Latest book: The Well-Grounded Rubyist ([The Well-Grounded Rubyist](http://www.manning.com/black2))

September Ruby training in NJ has been POSTPONED. Details to follow.

---

<div class="post-metadata">

**Author:** ![bryan-ash](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/59ef9b/32.png) [@bryan-ash](https://www.ruby-forum.com/u/bryan-ash)\
**Post date:** [August 29, 2009, 3:23am UTC](https://www.ruby-forum.com/t/association-extension-method/174584/3 "2009-08-29T03:23:07Z")

</div>

David,

thank you so much, that was the correct answer.

My complete association extension is now:

class Dropzone \< ActiveRecord::Base  
has\_many :transactions, :through =\> :accounts do  
def limited\_to(transaction)  
scope = Transaction.scoped({ :conditions =\>  
[‘accounts.dropzone\_id = ?’, proxy\_owner.id],  
:include =\>  
[:account, :payment\_method, :slot] })  
scope = scope.scoped :conditions =\> [‘name ILIKE ?’, “%#  
{transaction.account\_name}%”] unless transaction.account\_name.blank?  
scope = scope.scoped :conditions =\> [‘payment\_method\_id = ?’,  
transaction.payment\_method\_id] unless  
transaction.payment\_method\_id.blank?  
scope  
end  
end  
end
