2010-06-07 7 views
0

Je me demande sur la façon intelligente de le faire ...méthode Rails comme une ressource imbriquée

J'ai des méthodes qui renvoient une valeur lorsqu'il est passé d'un objet en tant que paramètre, tels que:

Je voudrais utiliser les mêmes méthodes exactes comme une ressource imbriquée pour appeler via jQuery/Ajax, comme ceci:

.load («/lieu/8/average_rainfall »)

Je comprends comment définir la route, mais comment puis-je dire à ma metho d à 'find'/location/8 et l'utiliser comme paramètre au lieu de @location comme prévu?

Merci!

Répondre

-1

Je viens de passer les URL en JavaScript lors de la génération de la vue, quelque chose comme ceci:

var ajaxWidget = new AjaxWidget('<%= average_rainfall(@location) %>'); 

Cela fonctionne pour moi parce que je ne ai pas besoin de passer des tas d'URL autour. Je viens de passer l'URL de base dans l'objet et ensuite ajouter les noms d'actions en JavaScript si nécessaire pour faire mes appels Ajax. Le problème avec ceci est que je ne peux pas garder JavaScript complètement discret, donc j'aimerais voir une meilleure réponse.

0

Vous ne savez pas quelle est exactement votre situation, mais une option serait d'utiliser un attribut data-prefix (html5). Vous pouvez ensuite récupérer l'URL de celle-ci avec javascript.

Donc, si sur un div:

<div data-rainfall_path="<%= average_rainfall_path(@location) -%>"></div> 

Ensuite, prenez juste avec jQuery pour faire votre demande ajax.

C'est la manière intelligente que je ferais.

+0

Plus besoin d'être intelligent! –

0

Il semble que vous essayez d'utiliser des aides à la visualisation et la logique du contrôleur où un modèle serait idéal. Vous devez coller la méthode average_rainfall dans votre modèle d'emplacement, utilisez alors que dans la vue comme ceci:

<%= @location.average_rainfall %> 

Ensuite, dans votre contrôleur Emplacements utiliser en appelant /locations/1/avg_rainfall du javascript.

def avg_rainfall 
    @location = Location.find(params[:id]) 

    render :json => { :avg_rainfall => @location.average_rainfall } 
end 
+0

Vous m'avez ouvert l'esprit. Je comprends maintenant comment mettre en place un gros modèle/contrôleur maigre. Merci!! – Blastula

Questions connexes