No bug.  I just figured it out: 
http://datamapper.lighthouseapp.com/projects/20609-datamapper/tickets/1510-has-n-association-with-through-and-via-breaks-due-to-ambiguous-inner-join-condition

Basically do not use a symbol for your storage_name.  Bad things will happen 
and it could be hard to track down ;)


El 13/05/2011, a las 23:43, Chris Corbyn escribió:

> This isn't a show-stopper for me, as I was marvelling at DM's ability to find 
> records via relations more than one JOIN clause away, but I seem to have run 
> into a DM bug.
> 
> I have this pseudo legacy schema:
> 
> user (
>  userid INT PRIMARY KEY,
>  ... snip ...
> )
> 
> auction (
>  auctionid INT PRIMARY KEY,
>  userid INT,
>  ... snip ...
> )
> 
> auctionbid (
>  bidid INT PRIMARY KEY,
>  userid INT,
>  auctionid INT,
> )
> 
> Now, a user owns many auctions, which in turn own many bids (owned by other 
> users).  I was trying to see if DM could handle providing an accessor on the 
> User model for "received_bids", by using "has n, :through, :via":
> 
> class User
>   ... SNIP ...
>    has n, :auctions, :child_key => [ 'userid' ]
>    has n, :received_bids, 'Bid', :through => :auctions, :via => :bids
>    ... SNIP ...
> end
> 
> It looks like the SQL it generates *would* work, only that DM is leaving 
> ambiguous field names in one of the JOIN clauses:
> 
> Column 'userid' in on clause is ambiguous (code: 1052, sql state: 23000, 
> query: SELECT `auctionbid`.`bidid`, `auctionbid`.`amount`, 
> `auctionbid`.`status`, `auctionbid`.`auctionid` FROM `auctionbid` INNER JOIN 
> `auction` ON `auctionbid`.`auctionid` = `auction`.`auctionid` INNER JOIN 
> `user` ON `auction`.`userid` = `userid` WHERE `auction`.`userid` = 97639 
> GROUP BY `auctionbid`.`bidid`, `auctionbid`.`amount`, `auctionbid`.`status`, 
> `auctionbid`.`auctionid` ORDER BY `auctionbid`.`bidid`
> 
> The query should be (added `user` in the second JOIN clause):
> 
> SELECT `auctionbid`.`bidid`, `auctionbid`.`amount`, `auctionbid`.`status`, 
> `auctionbid`.`auctionid` FROM `auctionbid` INNER JOIN `auction` ON 
> `auctionbid`.`auctionid` = `auction`.`auctionid` INNER JOIN `user` ON 
> `auction`.`userid` = `user`.`userid` WHERE `auction`.`userid` = 97639 GROUP 
> BY `auctionbid`.`bidid`, `auctionbid`.`amount`, `auctionbid`.`status`, 
> `auctionbid`.`auctionid` ORDER BY `auctionbid`.`bidid`
> 
> Did I misuse the :through and :via options, or have I found a bug that I 
> should report?  It's the first time I've tried to use such a complex 
> association, and DM appears to have the logic correct, but failing for a 
> silly reason.
> 
> DM allows me to use a slightly longer way around for now, doing 
> User.auctions.bids, though this executes two queries, placing a large IN() 
> clause on the second query.
> 
> Cheers,
> 
> Chris

-- 
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en.

Reply via email to