Assigning values of an object when it is created based on mysql queries

I want to use a value entered in by a user in an object's form to look
up another value in a reference table and assign that value to the
corresponding attribute in the object. How do I do that?

Right now I have in my controller create method:

    if @number = Work.find_by_sql( "SELECT inv FROM
samples_development.works WHERE worknbr REGEXP '" +
@sample['work_number'] + "';" )
        @sample.inv = @number
    end

But it assigns something odd to the number attribute that looks like
this:

!ruby/object:Work attributes: inv: INV 1986/MR 690/2201
attributes_cache: {} -

Should I be doing this in the model instead?

I want to use a value entered in by a user in an object's form to look
up another value in a reference table and assign that value to the
corresponding attribute in the object. How do I do that?

Right now I have in my controller create method:

if @number = Work\.find\_by\_sql\( "SELECT inv FROM

samples_development.works WHERE worknbr REGEXP '" +
@sample['work_number'] + "';" )

find_by_sql always returns an array of instances of the corresponding
class (Work in this case) no matter what the select clause is. The
columns in the result set are all there as attributes though

Fred

Ok, thanks! So would this be the way to do it?

    @i = Work.find_by_sql( "SELECT inv FROM samples_development.works
WHERE worknbr REGEXP '" + @sample['work_number'] + "';" )
    @sample.inv = @i['inv']

I keep getting "can't convert String into Integer"

No, that was wrong, it returns an array, so I had to add .first :

    @i = Work.find_by_sql( "SELECT inv FROM samples_development.works
WHERE worknbr REGEXP '" + @sample['work_number'] + "';" )
    @sample.inv = @i.first['inv']