2013-02-10 67 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> 

我不明白这是为什么返回一个对象或为什么它试图找到用户,而不是饲料对象是的id被传递给它。搜索几个小时后,我似乎无法指出正确的方向,所以任何帮助将非常感谢!

回答

0

在你User类,我觉得你的订阅方法是错误的,它应该be

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

我知道它会是这样的简单!非常感谢。 – dlachasse 2013-02-10 19:27:26

+0

@dlachasse不客气:) – alestanis 2013-02-10 20:11:14

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 
相关问题