无法访问attr_accessor定义的变量

时间:2012-07-11 15:12:01

标签: ruby-on-rails activerecord attr-accessor

我正在使用Thinking Sphinx来运行搜索,我得到了合适的ActiveRecord模型。问题是,我想在每个模型上创建一个合适的链接路径和文本,然后通过AJAX以JSON的形式将信息发送到浏览器。我使用以下内容来构建这些链接属性:

在控制器中:

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_ *属性,更不用说它们的值了。我尝试在build_ajax_response方法中使用@search_link以及search_link。

我这样做错了吗?可能会有其他干扰吗?

1 个答案:

答案 0 :(得分:10)

Rails的默认to_json不知道您添加的那些额外的非活动记录属性。最简单的可能是将它们指定为包含的额外方法:

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