Я в процессе создания своего первого приложения Rails и схожу с ума, зная, что это, вероятно, простое исправление. У меня возникли проблемы с возвратом соответствующего объекта и атрибута из метода. У меня три модели: пользователь, фид и подписка.Rails: метод возвращает объект вместо атрибута
Пользователь:
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 (подача) прямо из консоли работает только хорошо, но тест с его использованием не проходит. Испытание на вопрос:
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>
Я не понимаю, почему это возвращает объект или почему он пытается найти идентификатор пользователя вместо объекта поток, что это передается ему. После поиска в течение нескольких часов я просто не могу показаться в правильном направлении, поэтому любая помощь будет очень оценена!
Я знал, что это будет что-то простое! Огромное спасибо. – dlachasse
@dlachasse Добро пожаловать :) – alestanis