2012-07-11 13 views
5

Estoy usando Thinking Sphinx para ejecutar búsquedas y obtengo los modelos apropiados de ActiveRecord. El problema es que quiero crear una ruta de enlace y un texto apropiados en cada modelo, luego enviar la información al navegador en forma de JSON, a través de AJAX. Estoy utilizando el siguiente enlace para construir los atributos:No se puede acceder a attr_accessor variables definidas

En el controlador:

 
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 
En el modelo:
 
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

El objeto JSON resultante no tiene ninguno de los atributos search_ * en la lista, y mucho menos tienen un valor para ellos. Intenté usar @search_link y simplemente search_link en el método build_ajax_response.

¿Estoy haciendo esto mal? ¿Podría haber algo más que interfiera?

+0

¿Ha intentado utilizar 'build_ajax_response' en la consola? ¿Se ha planteado algo, hay algo establecido? – Draiken

+0

Cuando ejecuto build_ajax_response no genera ningún error, pero, en la moda típica de ruby, devuelve la última expresión evaluada. (En este caso, self.name) – Tricnic

Respuesta

8

El valor predeterminado to_json de Rails no conoce los atributos de registro extra no activos que ha agregado. Lo más fácil posible es, probablemente, especificarlos como métodos adicionales para incluir:

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

¡De hecho, esto funciona como yo quería! Gracias, Frederick. – Tricnic

+0

Esto funcionó para mí también. Solo para aclarar, devuelve los resultados de estos métodos especificados en el JSON además de los atributos regulares. –

Cuestiones relacionadas