Le filtrage des Rails 3, la requête de base de données à travers de multiples conditions/filtres
Je suis dans une vraie situation ici et je suis assez sûr que ce que je suis en train de faire est relativement simple. Fondamentalement, j'ai une base de données (migration à suivre) qui répertorie tout un tas d'étudiants et d'information à leur sujet. Il y a quatre colonnes, seeking_position, min_hourly, max_hourly, et start_weeks et j'ai besoin d'être en mesure de filtrer sur le front-end du site. Maintenant tout ce que je peux trouver comment faire, c'est montrer une page avec tous les utilisateurs. Je suis pas de moyens à la recherche de subsides ici, j'ai déjà passé par tout ce que je sais et même essayé plein de trucs que je ne comprenais pas vraiment pour essayer et obtenir de ce travail. Ce qui semble être le déclenchement me est de trouver un moyen de filtrer par plusieurs choses en même temps. Par exemple, montrer à tous les élèves d'une seeking_position de "stage", un min_hourly de "7", un max_hourly de "10", et un start_weeks de "2 à 4". Des idées? Je suis sur des Rails 3.0.3 utiliser ActiveRecord sans échafaudage. Merci 🙂
Ma migration:
class CreateStudents < ActiveRecord::Migration
def self.up
create_table :students do |t|
t.string :name
t.string :email
t.integer :phone
t.text :bio
t.text :resume
t.string :seeking_position
t.integer :min_hourly
t.integer :max_hourly
t.integer :start_weeks
t.string :pic_uid
t.timestamps
end
end
def self.down
drop_table :students
end
end
OriginalL'auteur Robert Klubenspies | 2011-03-08
Vous devez vous connecter pour publier un commentaire.
C'est assez simple ensemble de conditions pour votre requête. Vous devriez également vérifier searchlogic. C'est génial et vous libère de l'écriture d'un lot de SQL.
Définir quelques variables
Puis écrire le code comme ceci:
Dans Rails 3, vous pouvez utiliser la nouvelle
where()
fonctionOriginalL'auteur Paul Schreiber
Remplacer min/max horaire des champs avec un horaire de terrain, puisque tout le monde veut leur max à l'infini:
Cela sonne comme une bonne idée! Mais une question: faut-il la 7..10 être stocké sous forme d'un entier dans la base de données? Il a essayé et il a seulement sauvé le "7" de la partie. Quand j'ai fait la colonne de base de données d'une chaîne, je ne peux pas appeler le min ou le max méthodes.
La plage est juste pour la requête. Vous auriez enregistrer le :horaire comme un int
OriginalL'auteur Jordan
Dans Rails 3, vous pouvez utiliser quelque chose comme ceci:
Student.where(:seeking_position => 'internship')
de définir des requêtes différentes.
Voici un screencast avec plus de détails: http://railscasts.com/episodes/202-active-record-queries-in-rails-3
OriginalL'auteur Zepplock