Cannot convert String into Integer

Hi, I’m trying to implement a live search that supports searching for
multiple words. So for example, if I type “ruby rails” in the search
field, I would return results that have either the word “ruby” in them
or the word “rails” in them. However, this is just a background as to
what the following code is trying to do and might not even be needed to
fix my seemingly simple problem that I am unable to solve. I believe I
have the algorithm down to do what I want, below.

arr = @params[:query].split()

condition = @params[:attribute].to_s + " LIKE ?"
while num < arr.length
  condition += "and " + @params[:attribute].to_s + " LIKE ?"
  num += 1
end

arr2 = [condition, "%#{arr[0]}%"]

num = 1
while num < arr.length
  arr2 += ["%#{arr[" + num + "]}%"] # <--- cannot convert String 

into Integer
num += 1
end

At the noted line, I receive the error “cannot convert String into
Integer”. When I hardcode a that line to:

  arr2 += ["%#{arr[1]}%"]

Everything works fine for only two word searches. So the num variable is
causing me problems for some reason. I perform both a num.to_s and a
num.to_i just to see if it’ll fix the issue or give me a different
error, but have not succeeded. This could be very simple and I am merely
not seeing what needs to be done, but in any case, I need help. Thanks!

-Gilles

Hmmm…

Apparently, putting num as part of the string solves the problem.

  arr2 += ["%#{arr[num]}%"]

Interesting.

-Gilles

Hi Gilles,

I don’t know if things will work in a way that is performant enogh with
your
LIKE ‘%…%’ query. But you could well solve performance problems later.

IMHO you can’t split an #{expression}, it needs to be in an unsplit
String.
Why don’t you put it like
expr = arr[num]
arr2 += ["%#{expr}%"]

or on one line

arr2 += ["%" + arr[num] + “%”]

For complex queries like the ones you are in need of you might find a
fulltext-search-engine useful to rule out performance issues if you’ve
got
lots of records. Search for ‘ferret’ and ‘acts_as_ferret’ for example.

Cheers,
Jan

Ah I see, you already found an even better way. Yes the expression of
#{}
gets evaluated inside of the string.

Cheers,
Jan

Jan P. wrote:

Ah I see, you already found an even better way. Yes the expression of
#{}
gets evaluated inside of the string.

Cheers,
Jan

Ahhhh I see. Thanks for the reply Jan!

-Gilles

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