Сохранить данные формы поиска Ruby On Rails - PullRequest
3 голосов
/ 09 марта 2011

Попытка создать поиск на моей домашней странице с помощью simple_form (почти так же, как formtastic).Поиск работает нормально, и я получаю свои результаты, но после отправки я хочу сохранить значения с тем, что отправил пользователь.

Я использую пространство имен для своей формы, так как я могу сохранить данные для формы.Вот некоторый код, который может помочь.

Контроллер

def index
  @results = Property.search(params[:search])
end

Просмотр

%h1 Search Form
= simple_form_for(:search) do |f|
    = f.input :location, :as => :select, :collection => Location.all.asc(:name)
        = f.input :type, :collection => PropertyType.all.asc(:name)
        = f.input :bedrooms, :collection => 1..10,
    %p.box
        = f.button :submit

-if @results
    %h1 Search Results
    .results
        - @results.each do |property|
            .result
                %h1= property.title

В контроллере индекса я пробовал все виды вещей, например

@search = params[:search]

Но каждый раз, когда я что-то пробую, поиск прерывается.

Что я делаю не так?

Надеюсь, вы сможете посоветовать

Ответы [ 3 ]

2 голосов
/ 09 марта 2011

Один из подходов - сделать так, как предложил Ксавье Холт, и передать значения для каждого входа.Простая форма документа предлагает:

 = f.input :remember_me, :input_html => { :value => '1' }

Другой подход - сделать так, чтобы простая форма сделала это за вас.SimpleForm автоматически заполнит поля значениями, если вы дадите ему что-то вроде объекта activerecord.

В этом случае это означает создание объекта модели:

class PropertySearchCriteria
  attr_accessor :location, :type, :bedrooms
  def initialize(options)
    self.location = options[:location]
    self.type = options[:bedrooms]
    self.bedrooms = options[:bedrooms]
  end
end

Затем измените контроллер:

def index
  @property_search_criteria = PropertySearchCriteria.new(params[:search])
  @results = Property.search(@property_search_criteria)
end

(вам также придется изменить метод Property.search)

Затем измените ваш simple_form_for:

= simple_form_for(:search, @property_search_criteria) do |f|

И если вы сделаете всеэто, и заставит звезды выравниваться как раз правильно, тогда simpleform предварительно заполнит поля формы самостоятельно.Возможно, вам придется добавить кое-что в PropertySearchCriteria, чтобы получить простую форму, чтобы быть по-настоящему счастливым.

Это много работы, чтобы просто показать значения, но это будет держать вас в здравом уме, если вам нужно добавитьвалидация.

0 голосов
/ 09 марта 2011

Я делаю нечто похожее в приложении, над которым работаю (я не использую formtastic, но это должно быть, по крайней мере, очень близко к тому, что работает для вас).Я обошел это, убедившись, что @search был хешем в контроллере:

@search = params[:search] || {}

А затем, используя @search[:key] в качестве опции :value во всех моих входах поиска (есть вероятность, что вынеобходимо установить @search.default = '', чтобы это работало):

<%= text_field_tag :name, :value => @search[:name] %>

И это все, что потребовалось.Поскольку мое приложение становится все более сложным и AJAXy, я думал о переносе параметров поиска в информацию о сеансе, что вы, возможно, захотите сделать сейчас, чтобы оставаться впереди, но если вы просто ищете простое решение, это сработалоотлично подходит для меня.

Надеюсь, это поможет!

0 голосов
/ 09 марта 2011

вы можете попробовать сохранить ваши параметры в сессии так:

def index
  @results = Property.search(params[:search])
  store_search
end

def store_search
  session[:search] = params[:search]
end

просто будьте уверены, когда закончите с параметрами, которые вы их очищаете

...
clear_search if session[:search]

def clear_search
  session[:search] = nil
end
...