Невозможно получить доступ к переменным, определенным attr_accessor

Я использую Thinking Sphinx для выполнения поиска и получаю соответствующие модели ActiveRecord в порядке. Проблема в том, что я хочу создать соответствующий путь ссылки и текст для каждой модели, а затем отправить информацию в браузер в форме JSON через AJAX. Для создания этих атрибутов ссылок я использую следующее:

В контроллере:

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_ *, не говоря уже о значении для них. Я пробовал использовать @search_link, а также просто search_link в методе build_ajax_response.

Я делаю это неправильно? Может ли что-то мешать?


person Tricnic    schedule 11.07.2012    source источник
comment
Вы пробовали использовать build_ajax_response на консоли? Что-то поднято, что-то установлено?   -  person Draiken    schedule 11.07.2012
comment
Когда я запускаю ‹code› build_ajax_response ‹/code›, он не вызывает никаких ошибок, но, как обычно, в стиле Ruby, он возвращает последнее вычисленное выражение. (В данном случае self.name)   -  person Tricnic    schedule 11.07.2012


Ответы (1)


По умолчанию to_json Rails не знает о тех дополнительных неактивных атрибутах записи, которые вы добавили. Самый простой вариант - это, вероятно, указать их как дополнительные методы, чтобы включить:

format.json { render :json => @results.to_json(:methods => [:search_link, :search_text]) }
person Frederick Cheung    schedule 11.07.2012
comment
Это действительно работает, как я и хотел! Спасибо, Фредерик. - person Tricnic; 11.07.2012
comment
Это сработало и для меня. Чтобы уточнить, он возвращает результаты этих указанных методов в JSON в дополнение к обычным атрибутам. - person Justin Schier; 01.04.2015