J'écris une application Rails dans laquelle j'ai deux modèles: un modèle Machine et un modèle MachineUpdate. Le modèle Machine a plusieurs MachineUpdates. MachineUpdate possède un champ date/heure. Je suis en train de récupérer tous les enregistrements de machines qui ont les critères suivants:Dans Rails, comment puis-je renvoyer un ensemble d'enregistrements basé sur un nombre d'éléments dans une relation OU des critères sur la relation?
- Le modèle de la machine n'a pas eu un MachineUpdate au cours des 2 dernières semaines, OU
- Le modèle de la machine n'a jamais eu toute mises à jour.
Actuellement, je suis l'accomplissement # 1 avec une portée du nom:
named_scope :needs_updates,
:include => :machine_updates,
:conditions => ['machine_updates.date < ?', UPDATE_THRESHOLD.days.ago]
Cependant, cela ne se modèles de machines qui ont eu au moins une mise à jour. Je voulais également récupérer les modèles de machine qui ont eu pas de mises à jour. Comment puis-je modifier needs_updates
pour que les articles retournés répondent également à ces critères?
Quand je d'abord mis en œuvre thi s change, j'ai l'erreur de base de données suivante: 'column" last_update "n'existe pas". J'ai sorti le truc 'last_update' et l'ai remplacé par la ligne' MAX (...) '. J'ai alors eu l'erreur de base de données suivante: 'syntaxe d'entrée invalide pour type timestamp:" ---! Ruby/object: Proc {} '. Par curiosité, j'ai enlevé le lambda, qui a résulté en une autre erreur de base de données: .machine_name "doit apparaître dans la clause GROUP BY ou être utilisé dans une fonction d'agrégat." – mipadi
En outre, en remarque, le lambda ne semble pas nécessaire: en fonction des journaux, l'horodatage envoyé par l'instruction SQL est – mipadi
Je suis sûr que vous avez besoin du lambda, sans cela, les choses fonctionneront dans l'environnement de développement, mais pas dans la production.Quant aux erreurs: (1) quelle version de Rails êtes-vous? en utilisant? (2) quel type de base de données utilisez-vous? (3) avez-vous ajouté des options à la portée nommée? J'ai créé une petite application simulacre et ce code a travaillé sur Rails 2.3.5 avec SQLite3 –