2012-07-11 7 views
5

Aramaları çalıştırmak için Thinking Sphinx kullanıyorum ve uygun ActiveRecord Modellerini iyi alıyorum. Sorun şu ki, her modelde uygun bir link yolu ve metin oluşturmak istiyorum, daha sonra bilgiyi AJAX aracılığıyla JSON biçiminde tarayıcıya gönderiyorum. O bağlantıyı kurmak için aşağıdaki kullanıyorum nitelikleri: Attr_accessor tanımlı değişkenlere erişilemiyor

 
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 
modelde:
 
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

çıkan json nesnesi * nitelikler listelenmiş çok daha az bir değere sahip search_ birini yok denetleyici olarak

onlar için. Ben sadece search_link kullanarak yanı sıra build_ajax_response yönteminde search_link kullanmayı denedim.

Bunu yanlış mı yapıyorum? Başka bir şey olabilir mi?

+0

Konsolda 'build_ajax_response' kullanmayı denediniz mi? Bir şey yükseltilmiş mi, bir şey mi ayarlanmış? – Draiken

+0

build_ajax_response çalıştırdığımda, herhangi bir hata oluşturmaz, ancak, tipik yakut biçiminde, son değerlendirilen ifadeyi döndürür. (Bu durumda, self.name) – Tricnic

cevap

8

Rayların varsayılan değeri to_json, eklediğiniz fazladan aktif olmayan kayıt öznitelikleri hakkında bilgi sahibi değil. Mümkün olan en kolay şey, bunları içerecek ek yöntemler olarak belirtmektir:

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

Bu gerçekten istediğim gibi çalışıyor! Teşekkür ederim Frederick. – Tricnic

+0

Bu benim için de çalıştı. Sadece açıklığa kavuşturmak için, JSON'daki bu belirtilen yöntemlerin sonuçlarını normal özniteliklere ek olarak verir. –