2013-02-10 2 views
0

Я в процессе создания своего первого приложения 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> 

Я не понимаю, почему это возвращает объект или почему он пытается найти идентификатор пользователя вместо объекта поток, что это передается ему. После поиска в течение нескольких часов я просто не могу показаться в правильном направлении, поэтому любая помощь будет очень оценена!

ответ

0

В вашем User классе, я думаю, что ваш подписаться метод неправильно, он должен be

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

Я знал, что это будет что-то простое! Огромное спасибо. – dlachasse

+0

@dlachasse Добро пожаловать :) – alestanis

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 
Смежные вопросы