8

我正在运行 rspec 测试以确保两个模型之间通过has_many和相互关联belongs_to。下面是我的测试。

describe "testing for has many links" do
  before do
    @post = Post.new(day: "Day 1", content: "Test")
    @link = Link.new(post_id: @post.id, title: "google", url: "google.com")
  end

  it "in the post model" do
    @post.links.first.url.should == "google.com"
  end
end

测试告诉我 url 是一个未定义的方法。我的测试有什么问题?或者我只是错过了一些基本的东西。

Post 的模型文件

has_many :links

Link 的模型文件

belongs_to :post

最重要的是,链接模型具有属性post_id

4

2 回答 2

18

您需要保存两个模型来验证这种关系,也可以使用shoulda gem。

代码如下所示:

describe Link do
  it { should belong_to(:post) }
end

describe Post do
  it { should have_many(:links) }
end
于 2012-11-15T01:51:06.417 回答
2

您需要将您分配给您linkpost否则,如果您这样做@post.links,您将得到一个空数组 ([]),它[].first返回nil. 然后你的尝试nil.url,然后你得到url 是一个未定义的方法NilClass

@post = Post.new(day: "Day 1", content: "Test")
@link = Link.new(title: "google", url: "google.com")
@post.links << @link
于 2012-11-15T01:14:33.107 回答