2017-08-16 5 views
10

J'ai un vieux rails projet 2.x que j'ai converti la plupart du temps sur des rails à 5.comportement Hacking RJS dans Rails 5

Une question est une partie de mes actions utilisées RJS, il ressemblait à:

if request.xhr? 
    render :action => 'new_user' and return 
end 

les new_user.js.rjs ressemble à quelque chose comme:

page.call "User.create", render(:partial => 'new_user'), {:userId => @user.id} 

en regardant la réponse en chrome je peux le voir est juste retour:

User.create('<tr><td>....</td></tr>', {"userId" : 123}); 

Je n'ai qu'à supporter l'appel RJS de type page.call, quel serait un "hack" facile à faire fonctionner dans les rails 5?

Je ne veux pas modifier tout mon code javascript, je dois simplement avoir un bloc javascript que je passe le code JS dans mes pages d'affichage à droite?

+0

Donc, vous voulez dire que vous ne pouvez pas utiliser rjs dans les rails 5? –

+0

@AkiraSuzuki Ouais je crois qu'il a été sorti dans les rails 3.x – Blankman

Répondre

2

J'ai fini par retourner une réponse JSON à mes pages de vue comme ceci:

some_partial_html = render_to_string(:partial => 'something') 

response = { 
    "html": some_partial_html, 
    "a" : 1 
}.to_json 
render json: response 

Et puis, à mon avis, j'ai utilisé les valeurs de réponse json comme arguments à l'objet javascript qui perf orms la fonctionnalité dont j'avais besoin.

2

Essayez de rendre une réponse sous forme de chaîne:

if request.xhr? 
    render render_to_string partial: 'new_user', 
    locals: { userId: @user.id }, 
    layout: false 
end 

Ou essayez d'utiliser gestionnaire de format à la place:

respond_to do |format| 
    format.rjs do 
    render render_to_string partial: 'new_user', 
     locals: { userId: @user.id }, 
     layout: false 
    end 
end