2016-03-22 12 views
15

私はrolify gemをセットアップしようとしていますが、コンソールのユーザーに役割を割り当てる際に問題が発生しています。私はcancancanとrolifyで工夫実行しているよRolify Table Error(user.add_role:admin Unknown Key Error)

2.2.1 :007 > user.add_role :admin 
ArgumentError: Unknown key: :optional. 

は、ここに私のエラーです。私はまた、購読支払いのサポートのために甲子園の宝石を実行しています。私はこのエラーが、私の「購読」テーブルにも「user_id」列があるという事実によって引き起こされたと思われます。この問題を解決するためにできることはありますか?

私のスキーマは次のとおりです。

create_table "subscriptions", force: :cascade do |t| 
t.string "stripe_id" 
t.integer "plan_id" 
t.string "last_four" 
t.integer "coupon_id" 
t.string "card_type" 
t.float "current_price" 
t.integer "user_id" 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
end 

create_table "users", force: :cascade do |t| 
t.string "email",     default: "", null: false 
t.string "encrypted_password",  default: "", null: false 
t.string "reset_password_token" 
t.datetime "reset_password_sent_at" 
t.datetime "remember_created_at" 
t.integer "sign_in_count",   default: 0, null: false 
t.datetime "current_sign_in_at" 
t.datetime "last_sign_in_at" 
t.string "current_sign_in_ip" 
t.string "last_sign_in_ip" 
t.datetime "created_at",       null: false 
t.datetime "updated_at",       null: false 
t.string "first_name" 
t.string "string" 
t.string "last_name" 
end 

add_index "users", ["email"], name: "index_users_on_email", unique: true 
add_index "users", ["reset_password_token"], name:  
"index_users_on_reset_password_token", unique: true 

create_table "users_roles", id: false, force: :cascade do |t| 
t.integer "user_id" 
t.integer "role_id" 
end 

add_index "users_roles", ["user_id", "role_id"], name: "index_users_roles_on_user_id_and_role_id" 

end 

ありがとうございます。 :optional => trueパラメータはレールバージョン5以上でサポートされ

class Role < ActiveRecord::Base 


has_and_belongs_to_many :users, :join_table => :users_roles 

    belongs_to :resource, 
      :polymorphic => true, 
      :optional => true 

    validates :resource_type, 
      :inclusion => { :in => Rolify.resource_types }, 
      :allow_nil => true 

    scopify 
end 

答えて

39

Rolifyロール・ジェネレータは、次のコードでロールモデルを生成します。この問題を回避するには、ロールモデルからその行を削除するだけでよいのです。以下は参考用の最終コードです:

class Role < ActiveRecord::Base 
    has_and_belongs_to_many :users, :join_table => :users_roles 

    belongs_to :resource, 
      :polymorphic => true 

    validates :resource_type, 
      :inclusion => { :in => Rolify.resource_types }, 
      :allow_nil => true 

    scopify 
end 
+0

これはうまくいきました。ありがとう@pranavpr! –

+3

ありがとう!これは本当に良い宝石ですが、この種のことは箱に収められていないことに失望しました。特に、Railsのバージョンが<5 – user2490003