Has_one problem in a form


#1

Hello all,

I have a syntax question. How does one refer to a field brought in via
a
has_one/belongs_to relationship in a form helper? Basically, I have two
models:

class Resource < ActiveRecord::Base
has_one :other_thing
end

class OtherThing < ActiveRecord::Base
belongs_to :resource
end

It has the normal id-resource_id foreign key relationship. OtherThing
has
two fields, plus the foreign key, call them field1 and field2.

In the ruby console, I can access field1 a couple of ways:

resource.other_thing.field1
resource.other_thing[‘field1’]

Maybe a few other ways.

What I want is to update field1 in a form that also updates fields in
the
resources table. It’s simple for fields that REALLY belong to resource,
but
seemingly a problem for related fields in other tables.

select(:resource, :status, @statuses) works fine, for instance.

I’m looking for

select(:resource.other_thing, :field1, @options),
select(:resource, :other_thing.field1, @options),
select(‘resource’, ‘other_thing.field1’, @options),
select(:resource, :other_thing[:field1], @options)
or something to like that, but no luck.

Anyone have any thoughts on the proper syntax?

Thanks in advance,

-Ron


#2

Ron M. wrote:

select(‘resource’, ‘other_thing.field1’, @options),
select(:resource, :other_thing[:field1], @options)

No, you can’t do that at present, though a long time ago I
wrote a patch for it: http://dev.rubyonrails.org/ticket/2053

Instead you need to write:

@other_thing = @resource.other_thing
select :other_thing, :field1

then process their posted parameters separately in your
controller.


We develop, watch us RoR, in numbers too big to ignore.


#3

Thanks Mark,

The select() loads properly with the option data now, but it doesn’t
reflect
the exising value in the database for some reason. I was able to bypass
that by using if/else logic in the form view to mark the “selected”
item.
Thanks for the push in the right direction (separating out other_thing
into
it’s own variable). Much appreciated,

-Ron