3 Stimmen

Bitte übersetzen Sie das, wobei die HTML-Tags beibehalten werden, wenn sie vorhanden sind: Behalten Sie die Suchformulardaten Ruby On Rails bei

Versuche, auf meiner Homepage mit simple_form (ziemlich ähnlich wie formtastic) eine Suche zu erstellen. Die Suche funktioniert einwandfrei und ich erhalte meine Ergebnisse, aber nach der Übermittlung möchte ich die Werte beibehalten, die der Benutzer eingereicht hat.

Ich verwende einen Namespace für mein Formular, also wie kann ich die Daten für das Formular beibehalten? Hier ist etwas Code, der helfen könnte.

Controller

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

Ansicht

%h1 Suchformular
= 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 Suchergebnisse
    .results
        - @results.each do |property|
            .result
                %h1= property.title

Im Index-Controller habe ich allerlei Dinge ausprobiert wie

@search = params[:search]

Aber jedes Mal, wenn ich etwas ausprobiere, bricht die Suche ab.

Was mache ich falsch?

Hoffe, Sie können beraten

2voto

Iain Punkte 4193

Eine Möglichkeit ist es, wie von Xavier Holt vorgeschlagen, vorzugehen und Werte an jedes Eingabefeld zu übergeben. Das simpleform doco schlägt vor:

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

Der andere Ansatz besteht darin, dass simpleform es für dich erledigt. SimpleForm füllt die Felder automatisch mit Werten, wenn du ihm beispielsweise ein ActiveRecord-Objekt gibst.

In diesem Fall bedeutet dies, ein Modellobjekt zu erstellen:

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

Dann änderst du deinen Controller:

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

(du musst auch die Methode Property.search ändern)

Dann änderst du dein simple_form_for:

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

Und wenn du all das machst und die Sterne sich genau richtig ausrichten, dann füllt simpleform die Formularfelder ganz von allein vor. Möglicherweise musst du einige Dinge zu PropertySearchCriteria hinzufügen, damit simpleform richtig glücklich ist.

Das ist eine Menge Aufwand, nur um die Werte angezeigt zu bekommen, aber es wird dich gesund erhalten, wenn du Validierungen hinzufügen musst.

1voto

Xavier Holt Punkte 14321

Ich mache etwas Ähnliches in der App, an der ich arbeite (ich verwende kein Formtastic, aber das sollte zumindest sehr nah an etwas sein, das für dich funktioniert). Ich habe es umgangen, indem ich sicherstellte, dass @search im Controller ein Hash war:

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

Und dann nutze @search[:key] als :value-Option in all meinen Sucheingaben (Es besteht die Möglichkeit, dass du @search.default = '' setzen musst, um dies zum Laufen zu bringen):

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

Und das war alles, was es brauchte. Da meine App immer komplizierter und AJAXy wird, habe ich überlegt, die Suchparameter in die Sitzungsinformationen zu verschieben, was du vielleicht jetzt machen möchtest, um voraus zu bleiben. Aber wenn du nur nach einer einfachen Lösung suchst, hat das bei mir super funktioniert.

Hoffe, das hilft!

0voto

Will Ayd Punkte 6486

Sie können versuchen, Ihre Parameter wie folgt in der Sitzung zu speichern:

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

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

Stellen Sie einfach sicher, dass Sie die Parameter bereinigen, wenn Sie fertig sind

...
clear_search if session[:search]

def clear_search
  session[:search] = nil
end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X