Используя Sunspot, у меня есть следующие настройки:Как найти несколько вариантов в Sunspot?
Форма поиска
<div>
Search field
<%= text_field_tag :search, params[:search] %>
Online
<%= check_box_tag :online_search, 'online_search_value',
params[:online_search_checked] %>
Street Address
<%= text_field_tag :location, params[:search_loc] %>
</div>
Поиск Контроллер
class SearchController < ApplicationController
def index
params[:online_search_checked] = true
restore_cookie
end
def results
update_cookie
restore_cookie
@search = Product.search do |q|
q.fulltext params[:search] unless params[:search].blank?
# Text field to search an address.
q.with(:location).near(params[:search_loc])
if params[:search_loc].present?
# Checkbox thats already checked off to search online.
# If it's un-checked It will not search online.
q.with(:online_search, false) if params[:online_search].nil?
end
@products = @search.results
end
def update_cookie
update_cookie_with_param(:online_search, :online_search_checked)
end
def restore_cookie
restore_param_from_cookie(:online_search_checked)
end
def update_cookie_with_param(value_param_name, checked_param_name)
checked = params[value_param_name].nil? ? "false" : "true"
cookies[checked_param_name] = { :value =>
checked, :expires => 2.weeks.from_now }
end
def restore_param_from_cookie(checked_param_name)
if cookies[checked_param_name]
params[checked_param_name] = (cookies[checked_param_name] == "true")
end
end
end
При поиске :location
, я хочу, чтобы включить :online_search
тех пор, пока пользователь отменяет флажок. Это то, что делает эта строка:
q.with(:online_search, false) if params[:online_search].nil?
Теперь, чтобы включить его поиск в :location
. Как я буду делать это с помощью Sunspot?
Я считаю, что бесконтрольно флажок не будет передан в ваш Params, если он не установлен. Я бы подумал, что просто выполнение 'if params [: online_search]' и т. Д. Будет работать нормально. – John
@johnernaut Я не совсем понимаю, что вы имеете в виду. Вы также можете сделать этот ответ, если хотите. – LearningRoR
'params [: online_search]' не должен быть отправлен, если он не был проверен. Попробуйте просто выполнить 'if params [: online_search] ... q.with (: online_search) ... end'. Дайте мне знать, если это сработает, и я отвечу. – John