This (and the remainder) would probably be more readable if you used
present? rather than !blank?
if conditions
!place.blank? ? conditions << [’ AND place LIKE ?', “%#{place}%”] :
conditions << []
I think you are confusing << with concat.
This code appends a single item to conditions (that is a 0 or 2 item
array) which isn’t what you intended. I’d probably write this as
conditions += [’ and …', “%#{place}” if place.present?
More readable (I think) would be
fragments = []
bind_variables = []
if title.present?
fragments << ‘title LIKE ?’
bind_variables << title
end
If place.present?
fragments << ‘category like ?’
bind_variables << %#{place}%"
…
end
conditions = [fragments.join(’ AND ')] + bind_variables
Which removes some of the duplication you currently have. You might
also want to look at something like squeel, which extends active
record to make it easier to write this sort of query.
!place.blank? ? conditions << [' AND category LIKE ?', "%#{place}%"] :
conditions << []
wrong number of bind variables (4 for 1) in: title LIKE ?
Everything works great, but I need this other options in order to create
my search and I don’t undertand why the error is in the “LiKE”
Does anyone could help me please?
Thanks in advance!
you can also do it like this
def self.searchadv(title, place, category, date)
klass = scoped
klass = klass.where(conditions for title here) if title.present?
klass = klass.where(conditions for place here) if place.present?
klass = klass.where(conditions for category here) if category.present?
klass = klass.where(conditions for date here) if date.present?
scopedend
This is using rails 3. But you can still use this for rails 2.3 (i’m
not
sure what version they introduced this),
you just have to change the where calls to scoped
On Tue, Dec 4, 2012 at 11:46 AM, Jim Ruther N. [email protected]
wrote:
end
!place.blank? ? conditions << [' AND category LIKE ?', "%#{place}%"] :
conditions << []
Thanks in advance!
scopedend
This is using rails 3. But you can still use this for rails 2.3 (i’m not
sure what version they introduced this),
you just have to change the where calls to scoped
the last line that calls scoped should be klass. my bad.