четверг, 1 сентября 2011 г.

Re: Advanced Search Form

Если я правильно понял, то будет так. Допусти есть поля 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

Комментариев нет:

Отправить комментарий