On 3 November 2011 16:42, mhayden <[email protected]> wrote:
> In my usage I've noticed that accessors (instance.field) work on > joins derived from model objects, but the hash access methods > (record[:field]) will also work for all fields of the result whether > from the model or the joined table. So I don't think any change would > be required to get what you are asking for. > I've been using the hash method for accessing fields where the lower > level implementation may change, e.g direct SQL is required. > Mike > Thanks Mike, I didn't realise you could use the hash style accessors, that works for me but the instance.field type doesn't. I'm running Sequel v3.25.0, so maybe that's something to do with it, or a setting... but thanks very much for the help. > > On Nov 3, 8:18 am, Jeremy Evans <[email protected]> wrote: > > On Nov 2, 10:26 pm, Iain Barnett <[email protected]> wrote: > > > > > > > > > > > > > > > > > > > > > Hi, > > > > > While trying out some new associations with dataset procs, I noticed > that > > > joins to a model would return a result as an instance of that model. > For > > > example: > > > > > User.join( Role ) > > > => #<Sequel::SQLite::Dataset: "SELECT * FROM `users` INNER JOIN > > > `roles`"> > > > User.join( Role ).first.class > > > => User > > > > > I would expect a hash, as in my mind it's equivalent to > > > > > DB[:users].join( DB[:roles] ) > > > => #<Sequel::SQLite::Dataset: "SELECT * FROM `users` INNER JOIN > (SELECT > > > * FROM `roles`) AS 't1'"> > > > DB[:users].join( DB[:roles] ).first.class > > > => Hash > > > > > Is there an option to make it return a hash? Otherwise, the extra > fields > > > don't have accessors as they're not defined on the model. I could use > > > `User.join( Role ).to_hash.first` but that isn't quite the same thing, > and > > > my first thought would be that it added a lot of overhead, especially > to > > > large datasets (but then I was wrong about the hash too! :) > > > > Dataset#naked does what you want (removes the row_proc that turns > > hashes into model objects). I wouldn't expect Model.join to remove > > the row_proc, I doubt most other Sequel users would expect it, and it > > would break backwards compatibility. If you want joins to remove the > > row_proc by default, you can easily do it yourself: > > > > Model.def_dataset_method(:join_table){|*a, &block| super(*a, > > &block).naked} > > > > Jeremy > Thanks Jeremy. I'll give this a try as well and see how it works out. There's just so many good options with this library! I really appreciate you taking the time to answer. Regards, Iain -- You received this message because you are subscribed to the Google Groups "sequel-talk" 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/sequel-talk?hl=en.
