Forum: Ruby on Rails has_many :through, with condition

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
76caedd87445c17860358841ae0de620?d=identicon&s=25 Lars Christensen (Guest)
on 2008-10-24 13:36
(Received via mailing list)
I have this simple model with orders and products. Orders looks like
this:

class Order < ActiveRecord::Base
  has_many :orders_products, :foreign_key => :order_id
  has_many :products, :through => :orders_products
  has_many :priority_products, :through => :orders_products, :source
=> :product, :conditions => { "orders_products.priority" => true }
end

The :condition on :priority_products is cause problems for me. It
worked fine in Rails 2.0.2, but breaks in Rails 2.1.1 when putting the
relation in a :include clause:

orders = Order.find(:all, :include => :priority_products)

This result in PostgreSQL saying: missing FROM-clause entry for table
"orders_products"

for this malformed query:

SELECT * FROM "products" WHERE ("products"."id" IN (1,2,3) AND
("orders_products"."priority" = 't'))

Full working example: http://pastie.org/299592

Is this something that should work, or am I making some mistake?
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-10-24 14:43
(Received via mailing list)
On Oct 24, 12:36 pm, Lars Christensen <lar...@belunktum.dk> wrote:
> The :condition on :priority_products is cause problems for me. It
> worked fine in Rails 2.0.2, but breaks in Rails 2.1.1 when putting the
> relation in a :include clause:
>
> orders = Order.find(:all, :include => :priority_products)

This is a problem with 2.1's implementation of eager loading. You
should be able to force a fallback to the old code by adding something
like :conditions => "some trivial condition on the priority_products
or orders_products table")

Fred
76caedd87445c17860358841ae0de620?d=identicon&s=25 Lars Christensen (Guest)
on 2008-10-27 15:46
(Received via mailing list)
> > orders = Order.find(:all, :include => :priority_products)
>
> This is a problem with 2.1's implementation of eager loading. You
> should be able to force a fallback to the old code by adding something
> like :conditions => "some trivial condition on the priority_products
> or orders_products table")

Thanks, this sovled the immediate problem. Will I need this workaround
with future version of Rails or is it something being looked at?

Rgds,
Lars
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-10-27 16:27
(Received via mailing list)
On 27 Oct 2008, at 14:45, Lars Christensen wrote:

> with future version of Rails or is it something being looked at?
>
I don't think 2.2 will be any different. I did have plans to look at
it but got side tracked and didn't get it finished.

Fred
613340c5fef56ad6fc3bf8cc617266ae?d=identicon&s=25 Andrew Porter (Guest)
on 2008-10-28 14:45
(Received via mailing list)
Frederick Cheung wrote:
>
> I don't think 2.2 will be any different. I did have plans to look at
> it but got side tracked and didn't get it finished.

Does anyone know if there are any plans to allow conditions to be
specified that are applied to the ON clause of a join ?
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-10-28 14:58
(Received via mailing list)
On 28 Oct 2008, at 13:44, Andrew Porter wrote:

>
> Frederick Cheung wrote:
>>
>> I don't think 2.2 will be any different. I did have plans to look at
>> it but got side tracked and didn't get it finished.
>
> Does anyone know if there are any plans to allow conditions to be
> specified that are applied to the ON clause of a join ?
you can do that anyway - :joins accepts arbitrary sql fragments.

Fred
This topic is locked and can not be replied to.