Es ist meine erste Frage in stackoverflow, weil ich immer finde, was ich brauche, aber nicht dieses Mal. Ich werde meinen Fall erklären ...Wie extrahiert man default_scope query und ruft es in einer has_many-Beziehung auf? - Schienen 4
Ich habe diese Modelle:
class Car < ActiveRecord::Base
has_many :rents
end
class Rent < ActiveRecord::Base
belongs_to :car
default_scope { where "end < ?", Time.now }
end
Und ihr Schema:
create_table "cars", force: :cascade do |t|
t.string "brand"
t.string "model"
t.string "family"
t.decimal "price"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "passengers"
t.string "trunk"
t.string "doors"
t.string "plate"
t.string "transmission"
end
create_table "rents", force: :cascade do |t|
t.datetime "start"
t.datetime "end"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "car_id"
end
Ich versuche, einen Weg zu finden, die gleichen Ergebnisse zu erhalten, durch Art und Weise der Umfang, dass ich das, wenn ich in meinem Controller-Typ:
def results
@cars = Car.all
end
ich alle Autos zu bekommen, und jene die Mieten, die ein „Ende“ va haben lue größer als der Param "Time.now", und diejenigen, die keine Miete hat.
Mein Ziel ist es, diese Abfrage etwas ähnlich wie diese Art und Weise zu tun, einen Bereich Aufruf:
def results
@cars = Car.available_for_rent
end
Jede Hilfe geschätzt wird. Danke im Voraus.
, wenn ich Sie JOIN verwenden das richtig verstanden, ein Auto zur Verfügung, wenn @ car.rents.where ("Start>?", Time.now) .wo ("end " , Time.now) gibt [] zurück? – lusketeer
Danke für die Antwort @lusketeer. Es gibt mir einen Syntaxfehler, wenn ich es auf eine Ansicht oder meinen Controller setze. Ich versuche alle Autos und deren Mieten zu senden, die die Anfrage vom Controller erfüllen. Das Ziel ist, wie man einen benannten Bereich auf die gleiche Weise aufruft wie default_scope, ohne dass er aufgerufen wird. –
Bienvenido ein stackoverflow – Miguel