Construire une phrase Rails ActiveRecord where
Comment mieux construire une offre where utilisant Rails ActiveRecord? Par exemple, supposons que j'ai une action du contrôleur qui renvoie une liste des entrées de blog:
Supposons maintenant que je souhaite pouvoir transférer le paramètre url Pour que cette action du contrôleur n'a renvoyé que des messages d'un certain auteur:
Je n'aime pas beaucoup ça. Si j'ai ajouté une commande ou une partition aux pages ou, plus pire, des paramètres plus facultatifs de la chaîne de requête URL Pour filtrer, ce contrôleur d'action serait devenu très complexe.
def index
@posts = Post.all
end
Supposons maintenant que je souhaite pouvoir transférer le paramètre url Pour que cette action du contrôleur n'a renvoyé que des messages d'un certain auteur:
def index
author_id = params[:author_id]
if author_id.nil?
@posts = Post.all
else
@posts = Post.where/"author = ?", author_id/
end
end
Je n'aime pas beaucoup ça. Si j'ai ajouté une commande ou une partition aux pages ou, plus pire, des paramètres plus facultatifs de la chaîne de requête URL Pour filtrer, ce contrôleur d'action serait devenu très complexe.
Aucun résultat connexe trouvé
Invité:
Pour répondre aux questions, connectez-vous ou registre
5 réponses
Christine
Confirmation de:
- C'est essentiellement équivalent chargé paresseux Post.all /dans la mesure où Post.all Retourne immédiatement un tableau
, tandis que Post.scoped Retourne juste l'objet de la relation/. Cette demande ne sera terminée que
Vous n'essaierez vraiment pas de le répéter dans la présentation /Appel .each/.
Dominique
Confirmation de:
IMHO Il a plus de sens si vous pensez à RESTful API, Index signifie tout la biodifier et obtenir /ou montrer/, Pour être demandé et le montrer!
Alice
Confirmation de:
Certaines zones sont introduites dans le modèle avec l'existence de l'existence du paramètre passé:
Ensuite, dans le contrôleur, vous pouvez simplement placer autant de filtres que vous le souhaitez, par exemple:
Le paramètre peut alors être une valeur ou une liste de valeurs séparées par des virgules et l'autre fonctionne bien.
Si un param n'existe pas, il manque juste cette phrase where Et il n'a pas filtré par ce critère particulier. Si le paramètre existe, il s'agit d'une chaîne vide, elle sera "Filtration" tout.
Bien entendu, cette décision ne répondra pas à toutes les circonstances. Si vous avez une page de point de vue avec plusieurs filtres, mais lorsque vous ouvrez pour la première fois, vous souhaitez afficher toutes vos données et aucune donnée tant que vous appuyez sur le bouton. "Envoyer" ou quelque chose de similaire /Comment ce contrôleur a-t-il fait/, Vous devrez le réparer un peu.
J'ai essayé SQL injecté et rails, Il semble que cela s'échappe bien afin de garder tout en sécurité comme je peux voir.
Emilie
Confirmation de:
Ensuite, vous pouvez faire quelque chose comme:
? filter[author_id]=1&filter[post_date]= ... etc.
Christine
Confirmation de:
http://guides.rubyonrails.org/routing.html
/Faites défiler jusqu'à 2.7 Ressources investies/.