我遇到了这 2 个错误,但我不确定如何修复它们。我一直遇到的一个问题是教程的新版本和旧版本之间的差异(rails 4 和 3.2 之间的差异)。
我的规范是:
ruby 版本:1.9.2p320
Rails 版本:3.2.13
Rspec: 2.11.1
计算机:Macbook Pro OS X Mountain Lion
错误
1) User following and unfollowing
Failure/Error: before { @user.unfollow!(other_user) }
NoMethodError:
undefined method `find_by' for []:ActiveRecord::Relation
# ./app/models/user.rb:36:in `unfollow!'
# ./spec/models/user_spec.rb:47:in `block (4 levels) in <top (required)>'
2) User following and unfollowing followed_users
Failure/Error: before { @user.unfollow!(other_user) }
NoMethodError:
undefined method `find_by' for []:ActiveRecord::Relation
# ./app/models/user.rb:36:in `unfollow!'
# ./spec/models/user_spec.rb:47:in `block (4 levels) in <top (required)>'
用户.rb
def following?(other_user)
relationships.where(followed_id: other_user.id).first
end
def follow!(other_user)
relationships.create!(followed_id: other_user.id)
end
def unfollow!(other_user)
relationships.find_by(followed_id: other_user.id).destroy!
end
user_spec.rb
describe "following" do
let(:other_user) { FactoryGirl.create(:user) }
before do
@user.save
@user.follow!(other_user)
end
it { should be_following(other_user) }
its(:followed_users) { should include(other_user) }
describe "followed users" do
subject { other_user }
its(:followers) {should include(@user) }
end
describe "and unfollowing" do
before { @user.unfollow!(other_user) }
it {should_not be_following(other_user) }
its(:followed_users) {should_not include(other_user) }
end
end
最佳答案
find_by
因为你正在使用它,在 Rails 3 中不存在。Rails 3 为此使用了 method_missing
,所以使用 find_by_followed_id
会工作。
我推荐使用 Hartl 的 Rails 3 tutorial .
关于ruby-on-rails - Michael Hartl 教程第 11 章中的 "undefined method ` find_by '",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18217066/