0

私は最初のRailsアプリケーションを構築している最中であり、これがおそらく簡単な修正であることを知って夢中になっています。メソッドから適切なオブジェクトと属性を返すのに問題があります。ユーザー、フィード、サブスクリプションの3つのモデルがあります。

ユーザー:

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>

これがオブジェクトを返している理由や、渡されているFeedオブジェクトではなくユーザーのIDを見つけようとしている理由がわかりません。数時間検索した後、私は正しい方向に向けられていないようですので、どんな助けでも大歓迎です!

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 に答える