On Dec 2, 6:26 pm, Jean <josor...@gmail.com> wrote:
> Hello guys,
>
> I trying to create the conditions of my search, but I have some troubles.
>
> This is the method I'm trying to create in my model.
>
> def self.searchadv(title, place, category, date)
> !title.blank? ? conditions = ['title LIKE ?', "%#{title}%"] : conditions = []
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.
Fred
> !place.blank? ? conditions << [' AND category LIKE ?', "%#{place}%"] : conditions << []
> !place.blank? ? conditions << [' AND date LIKE ?', "%#{place}%"] : conditions << []
> else
> !place.blank? ? conditions << [' place LIKE ?', "%#{place}%"] : conditions << []
> !place.blank? ? conditions << [' category LIKE ?', "%#{place}%"] : conditions << []
> !place.blank? ? conditions << [' date LIKE ?', "%#{place}%"] : conditions << []
> end
> find(:all, :conditions => conditions)end
>
> I get this error
>
> wrong number of bind variables (4 for 1) in: title LIKE ?
>
> if I delete this:
>
> if conditions
> !place.blank? ? conditions << [' AND place LIKE ?', "%#{place}%"] : conditions << []
> !place.blank? ? conditions << [' AND category LIKE ?', "%#{place}%"] : conditions << []
> !place.blank? ? conditions << [' AND date LIKE ?', "%#{place}%"] : conditions << []else
> !place.blank? ? conditions << [' place LIKE ?', "%#{place}%"] : conditions << []
> !place.blank? ? conditions << [' category LIKE ?', "%#{place}%"] : conditions << []
> !place.blank? ? conditions << [' date LIKE ?', "%#{place}%"] : conditions << []end
>
> 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 received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
No comments:
Post a Comment