2012-11-13 10 views
9

Ho una pagina di ricerca nella mia app, dove c'è un modulo di ricerca Ajax. Il modulo di ricerca funziona correttamente, passa i parametri al modello per filtrare la ricerca e il modello restituisce una raccolta di risultati. Alla ricerca di invio, i risultati @ vengono visualizzati sulla pagina. Ogni @result ha quindi un collegamento ad un'azione su di esso, come:Rails link_to con remote: true processing html invece di js dopo l'aggiornamento della pagina

<%=link_to "Message", message_user_path(:id => user.id), :remote => true%> 

Dove questa azione nel controller è:

respond_to :js, :html 
def message 
    @user_id = params[:id] 
    @user = User.find_by_id(@user_id) 
    respond_to do |format| 
    format.html 
    format.js 
    end 
end 

e questo risponde con message.js.erb, che innesca un pannello di messaggistica per far apparire un messaggio all'utente. Tutto questo funziona correttamente, controllando il registro vedo la giusta richiesta GET inviata, e il formato corretto in lavorazione:

Started GET "https://stackoverflow.com/users/3/message" 
Processing by UsersController#message as JS 

Tuttavia, se mi aggiorna la pagina e cercare di fare clic sul link stesso che stava lavorando prima , Ottengo il modello di errore mancante. Controllando il log, vedo che ora ci sono due richieste inviate, prima un html quindi la stessa richiesta js.

Started GET "https://stackoverflow.com/users/4/message" 
Processing by StudentsController#message as HTML 
... 
Completed 406 Not Acceptable in 3ms (ActiveRecord: 1.0ms) 

Started GET "https://stackoverflow.com/users/4/message" 
Processing by StudentsController#message as JS 

La richiesta html genera l'errore del modello mancante. Qualcuno sa perché l'aggiornamento della pagina fa sì che le rotaie tentino di rispondere con una richiesta html a un collegamento remoto?
EDIT: routes.rb

resources :students do 
    member do 
     get 'message' 
    end 
end 
+0

remove 'respond_to: js,: html' nel controller, non è necessario ne hai bisogno – Thanh

+0

puoi, infatti, rimuovere 'html' nei tuoi formati processabili, o forzare il link a chiamare js:' link_to "Message", message_user_path (: id => user.id,: format =>: js),: remote => true' –

+0

oh, e potresti avere problemi con la cache del browser. Hai controllato se il codice html reale è cambiato quando hai aggiornato la pagina? –

risposta

20

Il vostro app/assets/javascripts/application.js contengono

//= require jquery 
//= require jquery_ujs 

?

E il tuo erb contiene <%= javascript_include_tag "application" %>?

Stavo solo lottando con un problema come questo per ORE e l'ultimo di quei due punti lo ha risolto; Ho visto il primo punto menzionato in alcune altre domande, quindi lo ripeterò qui.

Spero che questo aiuti.

(Credit where credit's due)

+0

Questo è un risparmiatore di vita. molto bene. –

+0

Grazie a Dio per la tua risposta !! – Rachel

0

In generale, quando si utilizza link_to su un particolare pulsante o giù di lì, quando si preme il pulsante, as js richiesta viene inviare al dispositivo di controllo, ma cerca anche il rispettivo file .js.erb e così via.

4

Che risolutore per me aggiungevo: format => "js"

Quindi nel tuo caso:

<%=link_to "Message", message_user_path(:id => user.id, :format => "js"), :remote => true %> 
Problemi correlati