On Oct 14, 3:26 pm, Nate Wiger <[email protected]> wrote:
> So AR has the feature where you can create records using the
> association:
>
>     game = Game.find(1)
>     game.game_players.create(opts)
>
> While it is "kind of" just sugar for:
>
>     game = Game.find(1)
>     GamePlayer.create(opts.merge(:game_id => game.id))
>
> I have definitely observed programmers making fewer mistakes on the
> former method.  For one thing, if you're doing lots of dependent
> records, it's easy to accidentally put the wrong id there and totally
> miss it visually:
>
>     game = Game.find(1)
>     GamePlayer.create(opts.merge(:game_id => game_stats.id))
>
> This likely won't trigger an error since odds are there will be a
> record with the same sequence, so the FK will work.  Even spec'ing
> won't catch is since you'll probably be mocking everything with ID's
> 1,2,3,4,5 etc.
>
> Whereas, this is a bit more obvious something's not right:
>
>     game = Game.find(1)
>     game_stats.game_player.create(opts)
>
> In Sequel obviously this syntax doesn't work, because
> game.game_players is an Array (rather than a special Collection like
> in AR that has extra methods)
>
> I'm not at all tied to this specific syntax per se.  Is there an
> equivalent in Sequel, maybe using subset or similar scoping?

Sequel uses methods instead of proxies for modifying associations:

  game.add_game_player(GamePlayer.new(opts))

> BTW I'll be glad to help summarize these posts and help contribute to
> the Sequel/AR FAQ.

Thanks.  There currently isn't a "Sequel for ActiveRecord users" FAQ,
but adding one would probably make the transition easier for AR users.

Jeremy
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to