我实际上在我的应用程序中实现了一个小型用户管理。为此,每个都user
属于一个group
. 在我的组模型中,我定义了获取关联的方法:
class Group < ActiveRecord::Base
has_many :items
has_many :posts
def get_items
self.items
end
end
然后在我的用户模型中,我使用委托:
class User < ActiveModel::Base
delegate :get_items, to: :group, allow_nil: true
end
它实际上工作正常,然后在我的控制器中,我可以将其称为current_user.get_items
而不是current_user.group.items
. 我的问题在我的specs
. 由于我更改了它,与destroy
或show
方法(控制器)相关的所有内容都按预期工作:
context 'controllers' do
login_user
it 'should delete an item' do
item = FactoryGirl.create(:item)
expect{
delete :destroy, id: item
}.to change{ Item.count }.from(1).to(0)
end
end
上面的这个以前工作得很好。我认为我的问题来自我的用户工厂中的关联没有很好地定义:
工厂/用户.rb
FactoryGirl.define do
factory :user do
id 1
email "john@doe.com"
password "123456789"
password_confirmation "123456789"
association :group_id, factory: :group
end
end
控制器宏.rb
def login_user
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
user = FactoryGirl.create(:user)
user.confirm!
sign_in user
end
end
我一遍又一遍地查看我的代码,但不知道如何修复它。想法?
谢谢
编辑
对不起我迟到的回复。这是我的销毁操作在我的items_controller
:
def destroy
item = current_user.get_items.find_by id: params[:id]
item.destroy
redirect_to items_path, notice: 'Item deleted'
end
运行这些测试时,我得到一个undefined method 'destroy' for nil:NilClass
.