2012-07-11 34 views
5

Sto utilizzando Thinking Sphinx per eseguire ricerche e ottengo gli appropriati modelli di ActiveRecord. Il problema è che voglio creare un percorso di collegamento e un testo appropriati su ciascun modello, quindi inviare le informazioni al browser sotto forma di JSON, tramite AJAX. Sto usando il seguente collegamento per costruire quelli attributi:Impossibile accedere alle variabili definite attr_accessor

Nel controllore:

 
class FindController < ApplicationController 
    def tag_results 
    @results = ThinkingSphinx.search(params[:terms]) 
    @results.each do |result| 
     result.build_ajax_response 
    end 
    respond_to do |format| 
     format.html 
     format.json { render :json => @results } 
    end 
    end 
end 
Nel modello:
 
class TaggedItem < ActiveRecord::Base 
    attr_accessible :name 
    attr_accessor :search_link, :search_text

def build_ajax_response self.search_link = Rails.application.routes.url_helpers.tagged_item_path(self.id) self.search_text = self.name end end

L'oggetto JSON risultante non dispone di uno dei search_ * attributi elencati, tanto meno hanno un valore per loro. Ho provato a utilizzare @search_link e anche search_link nel metodo build_ajax_response.

Sto sbagliando? Potrebbe esserci qualcos'altro che interferisce?

+0

Hai provato a utilizzare 'build_ajax_response' sulla console? Qualcosa è sollevato, qualcosa è impostato? – Draiken

+0

Quando corro build_ajax_response non genera alcun errore, ma, in tipico stile rubino, restituisce l'ultima espressione valutata. (In questo caso, self.name) – Tricnic

risposta

8

L'impostazione predefinita di Rails to_json non conosce gli attributi di record extra non attivi aggiunti. La cosa più semplice possibile è probabilmente specificarli come metodi aggiuntivi da includere:

format.json { render :json => @results.to_json(:methods => [:search_link, :search_text]) } 
+0

Questo funziona davvero come volevo! Grazie, Federico. – Tricnic

+0

Questo ha funzionato anche per me. Giusto per chiarire, restituisce i risultati di questi metodi specificati nel JSON oltre agli attributi regolari. –

Problemi correlati