3 Stimmen

Rails hat_scope mit if Bedingung

In meinem Formular habe ich viele Felder, und wenn ich mein Formular absende, sehe ich in meiner URL viele leere Parameter, wie z.B. url?a=&b=&c= und mein has_scope-Modell nimmt an, dass ich diese Parameter mit Nullwert verwenden möchte, aber das ist falsch.

Teil meines Modells und Controllers:

class CarsController < ApplicationController
 has_scope :by_manufacturer
 has_scope :by_price, :using => [:price_from, :price_to]
end

class Car < ActiveRecord::Base
 scope :by_manufacturer, -> vehicle_manufacturer_id { where(:vehicle_manufacturer_id => vehicle_manufacturer_id) }
 scope :by_price, -> price_from, price_to { where("price >= ? AND price <= ?", price_from, price_to) }
end

Wie könnte ich etwas wie schreiben:

if vehicle_manufacturer_id.present? 
 has_scope :by_manufacturer
end

Wie überprüfe ich richtig auf Feldpräsenz? Und wo soll ich es schreiben und wie?

2voto

rails4guides.com Punkte 1441

Has_scope hat eine :if-Bedingung, die Sie verwenden können, um zu bestimmen, wann der Scope verwendet werden soll. Beispiel:

has_scope :by_manufacturer, if: vehicle_manufacturer_id.present?

Oder fügen Sie eine Bedingung zum Scope selbst hinzu:

scope :by_manufacturer, -> vehicle_manufacturer_id { where(:vehicle_manufacturer_id => vehicle_manufacturer_id) if vehicle_manufacturer_id.present? }

Ich kann es im Moment nicht testen, aber das sollte funktionieren. Ich glaube jedoch nicht, dass Ihr Problem darin besteht, ob Sie den Scope aufrufen oder nicht. Die URL-Parameter werden von Ihrer Ansicht an Ihren Controller übergeben. Der Scope bestimmt nur, welche Datensätze unter bestimmten Bedingungen zurückgegeben werden, sie sagen nichts darüber aus, welche URL-Parameter angezeigt werden sollen.

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