J'ai un panneau actif avec une seule personne à charge, c'est-à-dire que le choix sur la première liste déroulante Sélectionne des impacts ce qui apparaît dans la deuxième liste déroulante.
Tout fonctionnait parfaitement bien il y a quelques mois, mais je viens de réaliser hier, ce n'est pas Travailler plus. p>
J'ai réussi à trouver ce que l'erreur: ne fonctionne pas: (version actuelle): strong> p> i Obtenir cette erreur (formulaire chrome dev outils d'outils) p> Les rails 4 ont changé la façon dont je devrais utiliser Rechercher (paramètres [: ID] ..) ou la façon dont je devrais utiliser le chargement impatient P> Li>
ACTIVE Admin Modifie la façon dont il gère le chargement impatient: peut-être que cela ne fonctionne que sur l'index et non sur les pages d'édition ... P> Li>
Turbolinkinks maintenant sur Rails 4 modifie la façon dont je dois faire la charge impatiente? P> li>
ul> Voici le code: strud> p> - le javascript alimentant: strong> p> class DealSector < ActiveRecord::Base
has_many :deal_subsectors
end
class DealSubsector < ActiveRecord::Base
belongs_to :deal_sector, :foreign_key => 'deal_sector_id'
end
// for edit page
var deal_subsector = { };
$(document).ready(function() {
$('#deal_deal_sector_id').change(function() {
update_deal_subsector();
});
});
function update_deal_subsector() {
deal_sector_id = $('#deal_deal_sector_id').val(); //get the value of sector id
url = '/admin/deals/deal_subsectors_by_deal_sector?deal_sector_id=' + deal_sector_id; //make a query to the url passing the deal sector id as a parameter
$.getJSON(url, function(deal_subsectors) {
console.log(deal_subsectors);
$('#deal_deal_subsector_id').html("") //just blanks the id, blank it before populating it again if sector changes
for( i = 0; i < deal_subsectors.length; i++) {
console.log(deal_subsectors[i]);
$('#deal_deal_subsector_id').append("<option value=" + deal_subsectors[i].id + ">" + deal_subsectors[i].name + "</option>")
};
}); //pass the url and function to get subsector ids and all we get is assigned to the variable subsector_id
};
// for index page (filters)
$(document).ready(function() {
$('#q_deal_sector_id').change(function() {
update_deal_subsector_filter();
});
});
function update_deal_subsector_filter() {
deal_sector_id = $('#q_deal_sector_id').val(); //get the value of sector id
url = '/admin/deals/deal_subsectors_by_deal_sector?deal_sector_id=' + deal_sector_id; //make a query to the url passing the deal sector id as a parameter
$.getJSON(url, function(deal_subsectors) {
console.log(deal_subsectors);
$('#q_deal_subsector_id').html("") //just blanks the id, blank it before populating it again if sector changes
for( i = 0; i < deal_subsectors.length; i++) {
console.log(deal_subsectors[i]);
$('#q_deal_subsector_id').append("<option value=" + deal_subsectors[i].id + ">" + deal_subsectors[i].name + "</option>")
};
}); //pass the url and function to get subsector ids and all we get is assigned to the variable subsector_id
};
3 Réponses :
Lorsque vous appelez Si vous voyez que quelque chose frappe votre dB avec des requêtes - vous devez regarder dans un autre endroit. Dites, votre formulaire - affichez-vous un seul client par formulaire? Sinon, cela ira et récupère à nouveau tous les transstrautrices et réaliseront à nouveau tous les nouveaux clients. Essayez de fournir plus de code. P> activeCord :: Trouver Code> - Cela signifie que vous attendez d'obtenir un seul modèle unique de la DB.
Ensuite, vous vous référez à ce modèle et appelez
DealSubsectors Code> - Je suppose que c'est
has_many code> relation à votre modèle. Il produira 2 requêtes: d'abord chercher l'original
DealSelector CODE>, Deuxièmement - Tous les
COMPRESSUPTORSSECTORS CODE>.
Il n'y a rien que vous puissiez optimiser (sauf si vous
DealSubsectors code> est une méthode personnalisée dans votre modèle, pas la relation). P>
Oui, il a une relation has_many. Eh bien, quand vous dites que vous ne pouvez rien optimiser, mais je ne pense pas que ce soit vrai: je pensais que Egaer Chargement de WXAS signifie précisément de charger les ressources associées dans un appel afin que la requête soit plus efficace. Donc, ici, je veux que je veux charger avec le secteur du jeu des sous-secteurs associés. Je vais ajouter du code sur les relations modèles. Dis-moi quel autre code dont vous auriez besoin.
Utilisation de ce code, vous ne pouvez aucun moyen que vous puissiez utiliser la charge désireuse: alSector.find (Params [: Deal_Sector_ID]). Deal_subsectors Code> - Vous pouvez l'exécuter à partir de la console
(rails c) code> et voir les requêtes. Il tire 2 requêtes: pour trouver
troncsector code> et pour chercher
DealSubsectors code>. Vous devez penser à d'autres endroits où vous chargez des modèles - par exemple. à votre avis.
bien sûr. Ce que je m'attends à ce que cette question ne soit pas à dire, cela ne fonctionne pas tel quel. je sais que. Ce que j'attends, c'est plutôt comment je peux parvenir à accélérer les sous-secteurs de la transaction. Je sais pour un fait que vous pouvez accueillir des modèles de charges sur l'administrateur actif avec: inclut mais j'ai besoin de conseils et de réponses pour m'aider à le faire avec des réponses ou des idées précises.
Pourquoi ne pouvez-vous pas simplement récupérer les enregistrements Tous DealSSubsector pour le Secteur_Id CODE>?
DealSubsector.where(deal_sector_id: params[:deal_sector_id])
Yury remercie mais je ne dis pas ce que j'utilisais ne fonctionnait pas. Cela fonctionne parfaitement: @deal_subsectors = DealSector.Find (paramètres [: Deal_Sector_ID]). Deal_Subsectors Mais je veux utiliser le chargement impatient.
Rails 4 vient avec quelques modifications concernant l'algorithme de charge impatiente. Vous pouvez essayer les extraits de code ci-dessous dans votre cas:
@deal_subsectors = DealSector.includes(:deal_subsectors).find(params[:deal_sector_id]).dealsubsectors
semble fonctionner. Juste une question: est-il normal que la vitesse de chargement que je puisse voir à l'intérieur de mon terminal est plus élevée avec @deal_subsectors = @deal_subsectors = DealSector.eger_eger_Arger (: Deal_Subsectors) .Find (parames [: Deal_se Ctor_id]). Deal_subse CTors que lorsque je Ne faites pas de chargement avaié (@deal_subsectors = DealSector.Find (Params [: Deal_Sector_ID]). Deal_subsectors? Comme je n'ai pas de sous-secteurs (comme moins de 20 ans pour le moment), il est peut-être normal que la charge animée prend plus de temps que sans dépenser . Serait-il juste de dire que l'EagyLoad va payer lorsque j'aurai beaucoup plus de sous-secteurs?
Oui @Mathieu Vos pensées sont absolument correctes. La plupart du temps impatient de vous libérer du piège de requête N + 1, sans chargement impatient que vous pouvez exécuter 100 requis pour obtenir 1 résultat au lieu d'exécuter 1 requête pour obtenir 100 résultats. Le chargement désireux paiera toujours, peut-être que vous pourriez avoir une ou deux exceptions près. Dans votre cas, chargez de réduire définitivement le temps de requête et faites votre réponse rapidement. plus grand non. des données, vous aurez plus d'avantages que vous recevrez du chargement impatiété.
TX pour vos explications supplémentaires