2016-06-27 4 views
1

Ich bin froh, dass Sie meine Frage zu meiner Dev-Frage beantwortet haben, ich werde dieses Mal versuchen, selbsterklärender zu werden.Sinatra Dropdown-Liste

Ich habe eine Haupt app.rb, wo ich mehrere Endpunkte zu meiner Sinatra Ham Ansichten verwenden. Mein Projekt ist über ein Software-Portfolio, also habe ich diese Klasse: Software und Kategorie, welche Beziehung ist: eine Software hat eine Kategorie, und eine Kategorie hat viele Software. In dem Formular, in dem Sie einen neuen Software-Eintrag erstellen, lege ich eine Dropdown-Liste an, in der Sie zwischen 3 verschiedenen Kategorien wählen können: Desktop, Web und App. Bis dahin läuft alles gut. Die Sache ist, wenn die Softwareliste erscheint, möchte ich eine Dropdown-Liste setzen, um nach erstellten Kategorien zu filtern (ich habe bereits das "add category" -Formular mit seiner Klasse) und ich kann nicht herausfinden, wie man den Filter darin hinzufügt eine Schaltfläche Filter in der Softwareliste. Können Sie mir bitte helfen? Natürlich weiß ich, wie man den Button dort hinstellt, aber ich möchte nur die Software-Einträge anzeigen, wo die ausgewählte Kategorie übereinstimmt. Hier ist das Listenformular.

%select{:name => "category"} 
%option Desktop 
%option Web 
%option Device 
%input{:type => "submit", :value => "Filter", :class => "btn"} 
%ul.list 
- @sware.each do |software| 
    %div{:class =>"list-group"} 
    %a{:href =>"/software/edit/#{software.id}", :class =>"btn btn-lg btn-primary"} 
    = software.title 
    %a.pull-right(href="/software/delete/#{software.id}" class="btn btn-lg btn-danger") Delete 

Vielen Dank im Voraus!

Antwort

0

Neben dem Punkt, den @max pleaner gemacht hat, rufen Sie nicht wirklich das richtige Objekt in params. Es sollte params[:category] sein und Sie sollten so viel einfacher neu zu schreiben in der Lage:

get '/all' do 
    halt(401,'Not Authorized, please login to continue') unless session[:admin] 
    @sware = Software.all 
    haml :sware 
end 

post '/:category' do 
    @sware = Software.title.where(categorization: {Software.categorization => params[:category]} 
    haml :index # assuming index.haml is where you want to go 
end 

Dann Ihre Datei unter der Annahme richtig Einbuchtungen, Ihre Haml Datei sollte auch funktionieren:

%select{:name => 'category'} 
    %option Desktop 
    %option Web 
    %option Device 
%input{:type => 'submit', :value => 'Filter', :class => 'btn'} 
%ul.list 
    - @sware.each do |software| 
     %div{:class =>'list-group'} 
      %a{:href =>"/software/edit/#{software.id}", :class =>'btn btn-lg btn-primary'} 
       = software.title 
      %a.pull-right{:href=>"/software/delete/#{software.id}" :class=>'btn btn-lg btn-danger'} Delete 

Natürlich ist die Je mehr Informationen Sie zur Verfügung stellen können, desto besser kann das Problem verstanden werden.

1

Sie den Aufruf der index Methode wie folgt:

post '/all' do 
    index(:category) 
end 

Sie ein Argument für den index Aufruf übergeben, aber die index Methode nimmt keine Argumente.

Bitte fügen Sie den vollständigen Fehler mit Ihrer Frage.

+0

Wenn Sie zu dieser Antwort hinzufügen, wenn Sie beabsichtigen, die Schritte unter einer Route 'A' innerhalb einer anderen Route 'B' auszuführen, ist der richtige Weg [zu dieser Seite umleiten] (http: //www.sinatrarb .com/intro.html # Browser% 20Redirect). – Kashyap

1

index Aktion kann DRY'ed werden:

def index 
    category = case 
      when params[:Web] then :Web 
      when params[:Desktop] then :Desktop 
      when params[:Device] then :Device 
      end 

    @sware = Software.title.where(categorization: { Software.categorization => category }) 
end 

„Es funktioniert einfach nicht“ ist kein guter Ort Untersuchung des Problems zu starten. Weitere Debuginformationen sind erforderlich.