2016-08-15 4 views
0

Dies ist keine Hausaufgabe. Ich mache das, um meine RoR-Fähigkeiten zu verbessern.Filter Dropdown-Liste Option für Grouped_collection_select

Ich habe beide Manufacturer und Model Einheit. Ich habe alle Beziehung Setup richtig und Benutzer muss Manufacturer wählen, bevor Sie Model auswählen. Ich habe meiner Anwendung, die ich erstellt habe, weitere Funktionen hinzugefügt. Nun möchte ich die name aus der Dropdown-Liste Model herausfiltern, wobei die name das Wort (Other) enthält.

Beispiel für name Attribut in Model Einheit: F20, F10 (Other), E90.

Ich möchte den Namen des Modells herausfiltern, die (Other) enthalten. SQL-Anweisung wäre Model.where.not("name LIKE ?", "%(Other)%"). Nachdem manufacturer ausgewählt wurde, werden F20 und E90 angezeigt. F10 (Other) wird ausgeschlossen, da der Name das Wort (Other) enthält.

Dies ist, was ich für die Dropdown-Liste Formular habe.

<%= bootstrap_form_tag url: '/quotation/tints/generate' do |f| %> 
    <div class="field"> 
     <%= f.collection_select :manufacturer_id, Manufacturer.order(:name), :id, :name, {:prompt => "Select Manufacturer"} %> 
    </div> 

    <div class="field"> 
     <%= f.grouped_collection_select :model_id, Manufacturer.order(:name), :models, :name, :id, :name, {:prompt => "Select Model"} %> 
    </div> 

    //Some code here that are not related 
<% end %> 

Was ich versucht habe: In meinem tints_controller, dies und ich habe meine Form aktualisiert, um mit zu arbeiten, was ich geändert haben.

def quotation 
    @listmanufacturer = Manufacturer.order(:name) 
    @listmodel = Model.where.not("name LIKE ?", "%(Other)%") 
    render 'quotation' 
    end 

Meine Form

<%= bootstrap_form_tag url: '/quotation/tints/generate' do |f| %> 
    <div class="field"> 
     <%= f.collection_select :manufacturer_id, @listmanufacturer, :id, :name, {:prompt => "Select Manufacturer"} %> 
    </div> 

    <div class="field"> 
     <%= f.grouped_collection_select :model_id, @listmanufacturer, @listmodel, :name, :id, :name, {:prompt => "Select Model"} %> 
    </div> 

    //Some code here that are not related 
<% end %> 

Allerdings erhielt ich einen Fehler wie TypeError: nil is not a symbol. Ich kann meine models_controller nicht ändern, da die Dropdownliste einige Male in anderer Ansicht verwendet wird. Einige Ansichten benötigen die Modelle mit dem Wort (Other) und einige werden nicht benötigt.

@listmodel ist der Teil, der alles bricht. Indem ich :models durch @listmodel ersetze, hüpfe ich, um den Modellnamen herauszufiltern, der (Other) enthält.

Jede Hilfe wird sehr geschätzt!

Hinweis: Bis zu diesem Punkt funktioniert meine Anwendung ordnungsgemäß. Alle Beziehungen sind korrekt in model eingerichtet und routes sind konfiguriert.

UPDATE mehr Protokolle

ActionView::Template::Error (#<ActiveRecord::Relation [#<Model id: 1, name: "Kancil Old", manufacturer_id: 1, created_at: "2016-08-14 16:12:24", updated_at: "2016-08-14 16:12:24">, #<Model id: 2, name: "Kancil 04", manufacturer_id: 1, created_at: "2016-08-14 16:12:24", updated_at: "2016-08-14 16:12:24">, #<Model id: 3, name: "Kembara", manufacturer_id: 1, created_at: "2016-08-14 16:12:24", updated_at: "2016-08-14 16:12:24">, #<Model id: 4, name: "Kenari", manufacturer_id: 1, created_at: "2016-08-14 16:12:24", updated_at: "2016-08-14 16:12:24">, #<Model id: 5, name: "Kelisa", manufacturer_id: 1, created_at: "2016-08-14 16:12:24", updated_at: "2016-08-14 16:12:24">, #<Model id: 6, name: "Myvi 05", manufacturer_id: 1, created_at: "2016-08-14 16:12:24", updated_at: "2016-08-14 16:12:24">, #<Model id: 7, name: "Rusa", manufacturer_id: 1, created_at: "2016-08-14 16:12:24", updated_at: "2016-08-14 16:12:24">, #<Model id: 8, name: "Viva", manufacturer_id: 1, created_at: "2016-08-14 16:12:24", updated_at: "2016-08-14 16:12:24">, #<Model id: 9, name: "Alza", manufacturer_id: 1, created_at: "2016-08-14 16:12:24", updated_at: "2016-08-14 16:12:24">, #<Model id: 10, name: "Myvi Ii", manufacturer_id: 1, created_at: "2016-08-14 16:12:24", updated_at: "2016-08-14 16:12:24">, ...]> is not a symbol nor a string): 
    6:   </div> 
    7: 
    8:   <div class="field"> 
    9:    <%= f.grouped_collection_select :model_id, @listmanufacturer, @listmodel, :name, :id, :name, {:prompt => "Select Model"} %> 
    10:   </div> 
    11: 
    12:   <div class="field"> 

app/views/tints/quotation.html.erb:9:in `block in _app_views_tints_quotation_html_erb__1724914643_132263140' 
app/views/tints/quotation.html.erb:3:in `_app_views_tints_quotation_html_erb__1724914643_132263140' 
app/controllers/tints_controller.rb:47:in `quotation' 
    Rendering C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout 
    Rendering C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/_source.html.erb 
    Rendered C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (9.0ms) 
    Rendering C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb 
    Rendered C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (5.0ms) 
    Rendering C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb 
    Rendered C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.0ms) 
    Rendered C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (539.0ms) 
DEPRECATION WARNING: #original_exception is deprecated. Use #cause instead. (called from status_code_with_paginate at C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/will_paginate-3.1.0/lib/will_paginate/railtie.rb:49) 
+1

In welcher Zeile wird der Fehler angezeigt? Bitte posten Sie die Stack-Trace mit dem Fehler – p4sh4

+0

Meine Vermutung: Klammern sind möglicherweise ein Sonderzeichen, das zu entkommen ist ??? –

+1

@TarynEast Ich glaube nicht. Ich benutze 'Model.where.not (" name LIKE? ","% (Other)% ")' in der 'index.html.erb' und funktioniert gut ohne Escape-Zeichen. –

Antwort

0

In meinem Manufacturer model,

class Manufacturer < ApplicationRecord 
    //Something here 
    def listmodel 
     models.where.not("name LIKE ?", "%(Other)%") 
    end 
end 

In meinem form,

<%= bootstrap_form_tag url: '/quotation/tints/generate' do |f| %> 
     <div class="field"> 
      <%= f.collection_select :manufacturer_id, Manufacturer.all.order(:name), :id, :name, {:prompt => "Select Manufacturer"} %> 
     </div> 

     <div class="field"> 
      <%= f.grouped_collection_select :model_id, Manufacturer.all.order(:name), :listmodel, :name, :id, :name, {:prompt => "Select Model"} %> 
     </div> 
     //More code here 
<% end %> 

Jetzt in meinem Dropdown-Liste Modell mit dem Namen (Other) enthält, ausgeschlossen sein.

Verwandte Themen