0

我正在构建我的第一个 Rails 应用程序,知道这可能是一个简单的修复程序,我快疯了。我无法从方法返回正确的对象和属性。我有三个模型:用户、Feed 和订阅。

用户:

class User < ActiveRecord::Base
.
.
  has_many :subscriptions, dependent: :destroy
  has_many :feeds, through: :subscriptions

  def subscribe!(feed_id)
    subscriptions.create!(feed_id: feed.id)
  end
end

订阅:

class Subscription < ActiveRecord::Base
.
.
  belongs_to :user, class_name: "User"
  belongs_to :feed, class_name: "Feed"

  validates :user_id, presence: true
  validates :feed_id, presence: true
end

喂养:

class Feed < ActiveRecord::Base
.
.
  belongs_to :subscriptions

  def self.create_feed(feed_url)
    feed = Feedzirra::Feed.fetch_and_parse(feed_url)

    unless exists? :feed_url => feed.url
      create!(
        :title => feed.title,
        :feed_url => feed.feed_url,
        :url => feed.url,
        :etag => feed.etag,
        :last_modified=> feed.last_modified
      )
    end
  end
end

每当我从控制台显式调用 user.subscriptions.create!(feed) 时,它工作得很好,但使用它的测试没有通过。有问题的测试:

describe "subscribing" do
  let(:feed) { Feed.create_feed("http://www.somevalidfeed.com/feed/") }
  before { @user.subscribe!(feed) }
end

这将返回:

NameError: undefined local variable or method `feed' for #<User:0x007f9c951b3b98>

我不明白为什么这会返回一个对象,或者为什么它试图找到 User 的 id 而不是传递给它的 Feed 对象。搜索了几个小时后,我似乎无法指出正确的方向,因此非常感谢任何帮助!

4

2 回答 2

0

可能是这里的问题:

  def subscribe!(feed_id)
    subscriptions.create!(feed_id: feed.id)
  end

可能你的意思是

  def subscribe!(feed_id)
    subscriptions.create!(feed_id: feed_id)
  end

甚至

  def subscribe!(feed)
    subscriptions.create!(feed_id: feed.id)
  end
于 2013-02-10T10:25:12.427 回答
0

在你的User课堂上,我认为你的订阅方法是错误的,应该是

def subscribe!(feed)
  subscriptions.create!(feed_id: feed.id)
end
于 2013-02-10T10:25:49.820 回答