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
Hi -- On Fri, 28 Aug 2009, Bryan Ash wrote:> > 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],That should be accounts (plural) I suspect. David -- David A. Black / Ruby Power and Light, LLC / http://www.rubypal.com Ruby/Rails training, mentoring, consulting, code-review Latest book: The Well-Grounded Rubyist (http://www.manning.com/black2) September Ruby training in NJ has been POSTPONED. Details to follow.
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