私は実際に小さなユーザー管理をアプリに実装しました。そのために、それぞれ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
代わりにas を呼び出すことができます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
上記は以前は正常に機能していました。私の問題は、ユーザーファクトリーで関連付けが適切に定義されていないことに起因すると思います。
工場/users.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
controller_macros.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
コードを何度も見直しましたが、修正方法がわかりません。考え?
ありがとう
EDIT
返信が遅くなり申し訳ありません。これが私の破壊アクションが私の中でどのように見えるか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
.