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']