2012-07-11 5 views
5

J'utilise Thinking Sphinx pour exécuter des recherches et j'obtiens les modèles ActiveRecord appropriés. Le problème est, je veux créer un chemin de lien approprié et le texte sur chaque modèle, puis envoyer les informations au navigateur sous la forme de JSON, via AJAX. J'utilise ce qui suit pour construire les liens attributs:Impossible d'accéder aux variables définies par attr_accessor

Dans le contrôleur:

 
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 
Dans le modèle:
 
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'objet JSON résultant n'a pas de l'une des search_ * attributs répertoriés, beaucoup moins ont une valeur pour eux. J'ai essayé d'utiliser @search_link ainsi que search_link dans la méthode build_ajax_response.

Est-ce que je fais cela mal? Pourrait-il y avoir quelque chose d'autre qui interfère?

+0

Avez-vous essayé d'utiliser 'build_ajax_response' sur la console? Est-ce que quelque chose est soulevé, quelque chose est-il réglé – Draiken

+0

Lorsque j'exécute build_ajax_response, il ne génère aucune erreur, mais, de manière ruby, il renvoie la dernière expression évaluée. (Dans ce cas, self.name) – Tricnic

Répondre

8

Rails par défaut to_json ne connaît pas les attributs d'enregistrement supplémentaires non actifs que vous avez ajoutés. La chose la plus facile est probablement de les spécifier en tant que méthodes supplémentaires à inclure:

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

Cela fonctionne effectivement comme je le voulais! Merci, Frédéric. – Tricnic

+0

Cela a fonctionné pour moi aussi. Juste pour clarifier, il renvoie les résultats de ces méthodes spécifiées dans le JSON en plus des attributs réguliers. –

Questions connexes