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?

On Apr 1, 2:00 pm, ES [email protected] wrote:

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”

On Apr 1, 3:07 pm, Frederick C. [email protected]

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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs