On Sep 1, 10:57 pm, Sergey Pchelincev <jalkob...@gmail.com> wrote:
> Если я правильно понял, то будет так. Допусти есть поля title, color,
> format, type у записи node. Все они varchar(255) или text, тогда view
> будет таким
>
> <%= form_tag search_nodes_path do%>
> <% select_value = [['And', 'AND'],['Or', 'OR']]%>
> <% ['title', 'format', 'color', 'type'].each do |field|%>
> <p>
> <label><%= field.capitalize%></label>
> <%= text_field 'search', "#{field}[key]"%>
> <%= select 'search', "#{field}[type]", select_value %>
> </p>
> <%end%>
> <%= submit_tag 'Search'%>
> <%end%>
>
> controller
>
> def search
> and_part = params[:search].map {|field, param| "#{field} LIKE
> '#{param[:key]}%'" if param[:type] == 'AND'}.compact.join(" AND ")
> full_query = params[:search].map{|field, param| "(#{field} LIKE
> '#{param[:key]}%' AND #{and_part})" if
> param[:type]=='OR'}.compact.join(' OR ')
> full_query = and_part if full_query.blank?#на случай если все AND
> @nodes = Node.where(full_query)
> render :index
> end
> Возможно коллекцию параметров лучше вынести в helper или model. Да и
> генерацию sql_query будет неплохо отдать модели node
> В итоге получается следующий запрос:
>
> SELECT "nodes".* FROM "nodes" WHERE ((format LIKE 'dsfsdfsf%' AND
> title LIKE 'sdasa%' AND color LIKE 'dsfsfsd%' AND year LIKE 'dsfsdfsd
> %') OR (type LIKE 'dsfsfs%' AND title LIKE 'sdasa%' AND color LIKE
> 'dsfsfsd%' AND year LIKE 'dsfsdfsd%'))
>
> On 1 Вер, 18:53, Жоржик <katsgeorg...@gmail.com> wrote:
>
>
>
>
>
>
>
> > Есть задание: сделать форму поиска по нескольким полям. Каждое поле
> > имеет дополнительный параметр равный and или or (подставляется в
> > запросе).
> > Я новичек в rails, помогите реализовать.
--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru
четверг, 1 сентября 2011 г.
Re: Advanced Search Form
и еще неплохо защититься от sql injections
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий