我正在构建我的第一个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!(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对象。搜索了几个小时后,我似乎无法指出正确的方向,所以任何帮助都会非常感激!
答案 0 :(得分: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
答案 1 :(得分:0)
在User
课程中,我认为您的订阅方法有误,应该是
def subscribe!(feed)
subscriptions.create!(feed_id: feed.id)
end