Calling a default record for a has_many association

I have a Shop model that has_many Zones (a Zone assigns different
pricing to products). I want to save a default Zone for a Shop. This
is what I have in my Shop class:

has_one :default_zone, :class_name => “Zone”

After that, however, I am a bit lost. I know I can manually set
shop.default_zone_id to a, but I would imagine a better system
of doing this exists.

Angelo, a desperate man


Not sure what you are after really but your solution seems okay to me.
If you are wondering how to then update it then:

Check here:

You can do things like:

build a default zone (doesn’t auto-save)

shop.build_default_zone(:name => ‘Zone1’)

create a default zone (auto-saves)

shop.create_default_zone(:name => ‘Zone2’)

or assign an existing zone:

zone = Zone.find(3)
shop.default_zone = zone

That any help?


I tried different variations of what you posted, and unfortunately,
none of them worked.

Both shop.build_default_zone and shop.create_default_zone create a
Zone record with the Shop ID correctly saved, but the Shop’s
default_zone_id column isn’t updated; shop.default_zone_id remains

This is basically what I have in seeds.rb:

shop = = “Sample”

zone = shop.build_default_zone = “Default”

I attempted adding “shop.default_zone = Zone.first” at the end of
seeds.rb, but, again, it did not work.

Any ideas? Perhaps I’m ordering my saves/builds incorrectly? I can’t
get this seemingly simple thing to work.

Thanks for your help,