了解ActiveRecord ::与RSpec示例的关系

时间:2016-06-29 00:40:50

标签: ruby-on-rails ruby activerecord rspec-rails relation

我有以下ROR RSpec测试:

请记住,测试确实通过了以下代码。该方法已正确定义并执行预期的操作。问题是为什么当我修改并删除第二个例子中@public_topic周围的[]时,测试失败了?

describe "scopes" do
    before do
      @public_topic = Topic.create!(name: RandomData.random_sentence, description: RandomData.random_paragraph)
      @private_topic = Topic.create!(name: RandomData.random_sentence, description: RandomData.random_paragraph, public: false)
    end

    describe "visible_to(user)" do
      it "returns all topics if user is present" do
          user = User.new
          expect(Topic.visible_to(user)).to eq(Topic.all)
      end
      it "returns only public topics if user is nil" do
        expect(Topic.visible_to(nil)).to eq([@public_topic])
      end
    end
  end

更新

scope :visible_to, -> { where(public: true) }

1 个答案:

答案 0 :(得分:1)

如果没有看到visible_to的实施,很难说。

从第一个示例开始,看起来该方法返回一个ActiveRecord::Relation对象。这将代表一组对象,而不是一个对象。

所以,从本质上讲,它归结为:

object != [object]