Странная проблема с Sunspot. - PullRequest
       9

Странная проблема с Sunspot.

0 голосов
/ 18 августа 2011

У меня есть модель:

class Topic < ActiveRecord::Base
  attr_accessible :title, :description

  has_many :comments, :dependent => :destroy
end

И:

class Comment < ActiveRecord::Base
  attr_accessible :body, :topic_id
  belongs_to :topic
end

По моему topic_spec.rb:

  it "should have the right associated comment" do
      @topic.comments.should include(@comment)
    end

    it "should destroy associated comments" do
      @topic.destroy
      Comment.find_by_id(@comment.id).should be_nil
    end

И я получаю следующие ошибки:

1)   Failure/Error: @topic.comments.should == @comment
     NameError:
       undefined method `inspect' for class `ActiveRecord::Associations::CollectionProxy'

2) Failure/Error: Comment.find_by_id(@comment.id).should be_nil
   expected: nil
        got: #<Comment id: 1, body: "first", created_at: "2011-08-18 09:55:06", updated_at: "2011-08-18 09:55:06">

Что я делаю не так?Эта ошибка появилась после того, как я начал использовать солнечное пятно.

В моем topic.rb:

  searchable :auto_index => true, :auto_remove => true do
    text :title, :boost => 5
    text :description

    text :comments do
      comments.map(&:body)
    end
  end

Если я прокомментировал следующие строки:

#    text :comments do
#      comments.map(&:body)
#    end

Все тесты успешно пройдены!

Ответы [ 2 ]

1 голос
/ 18 августа 2011

Проблема в том, что вы сравниваете массив (@topic.comments) и объект (@comment) с ==. Вы должны проверить, содержится ли объект в массиве:

@topic.comments.should include(@comment)
0 голосов
/ 23 августа 2011

Я решил эту проблему, добавив следующие строки в spec_helper.rb:

  config.before(:each) do
    ::Sunspot.session = ::Sunspot::Rails::StubSessionProxy.new(::Sunspot.session)
  end

  config.after(:each) do
    ::Sunspot.session = ::Sunspot.session.original_session
  end
...