2017-08-28 2 views
0

Je suis en train de passer une chaîne d'URL pour une vue d'un de mes méthodes de commande, comme ceci:Prévenir redirigent lorsque vous appelez url_for dans une application rails

def index 
    @locals = {table_cols: $config['global_fields'], 
       table_title: $config['main_page']['table_title'], 
       ajax: url_for(action: index_data)}} # HERE 
end 

index_data est une fonction dans mon contrôleur qui retourne certaines données au format JSON. Cependant, lorsque je navigue vers la page d'index de mon application, le navigateur affiche simplement la sortie JSON de index_data.

Je suppose que l'appel d'url_for au sein de l'index redirige cette page vers index_data - existe-t-il un moyen d'empêcher cela et d'avoir simplement url_for pour retourner la chaîne, par ex. '/ controller/index_data'?

Merci

+0

Pourquoi 'config' $ un mondial variable? C'est plutôt imprudent. – tadman

+0

@tadman - c'est pour ma configuration au niveau du contrôleur. Désolé, je suis très nouveau à ruby ​​/ rails. Avez-vous une suggestion sur la façon de s'améliorer? – Valkry

+0

Il est généralement préférable de mettre ce genre de choses dans le module de votre application, comme 'MyApp.config ['global_fields']' où vous pouvez ajouter une méthode 'config' à' lib/my_app.rb' ou quoi que ce soit. – tadman

Répondre

1

C'est probablement parce que vous appelez l'action index_data lorsque vous essayez d'obtenir une URL pour, et l'appelant est Tromper Rails en pensant que vous voulez rendre de cette action.

Si vous changez url_for pour pointer vers un symbole (ou chaîne) au lieu de la valeur de retour de l'action, les choses vont probablement commencer à travailler comme prévu:

@locals = { ..., ajax: url_for(action: :index_data)}} 
+0

Merci, cela a fonctionné! – Valkry