2012-07-11 103 views
5

我正在使用思維獅身人面像來運行搜索,我得到相應的ActiveRecord模型罰款。問題是,我想在每個模型上創建適當的鏈接路徑和文本,然後通過AJAX將信息以JSON的形式發送到瀏覽器。我使用的是下面建立這些連接屬性:無法訪問attr_accessor定義的變量

在控制器:

 
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 
在模型:
 
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

生成的JSON對象不具有任何的搜索_ *相關屬性上市,更不用說有一個值爲他們。我試過使用@search_link以及 build_ajax_response方法中的search_link。

我做錯了嗎?會不會有其他干擾?

+0

您是否嘗試過在控制檯上使用'build_ajax_response'?是否提出了一些問題,是否設置了? – Draiken 2012-07-11 15:17:22

+0

當我運行build_ajax_response它不會引發任何錯誤,但以典型的ruby方式,它確實返回最後一次評估的表達式。 (在這種情況下,self.name) – Tricnic 2012-07-11 15:39:17

回答

8

Rails的默認to_json不知道您添加的那些額外的非活動記錄屬性。最簡單的可能是將它們指定爲包含以下額外方法:

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

這確實工作,因爲我想!謝謝你,弗雷德裏克。 – Tricnic 2012-07-11 15:41:48

+0

這也適用於我。爲了澄清,除了常規屬性外,它還返回JSON中這些指定方法的結果。 – 2015-04-01 15:18:59