ActiveRecord::RecordInvalid: Проверката е неуспешна: Типът ресурс не е включен в списъка

Аз съм нов в rails. Използвам rolify gem за добавяне на потребителски роли. Получавам този проблем, когато се опитвам да добавя роля от rails конзолата. Някой сблъсквал ли се е с този проблем?

u = User.first
u.add_role(:admin).save!

списък с грешки ===

ActiveRecord::RecordInvalid: Validation failed: Resource type is not included in the list.

Rolify миграционен файл ============

class RolifyCreateRoles < ActiveRecord::Migration
def change
create_table(:roles) do |t|
t.string :name
t.references :resource, :polymorphic => true
t.timestamps
end

create_table(:users_roles, :id => false) do |t|
  t.references :user
  t.references :role
end

add_index(:roles, :name)
add_index(:roles, [ :name, :resource_type, :resource_id ])
add_index(:users_roles, [ :user_id, :role_id ])

end
end`

Проследих документацията за инсталиране на rolify от тук == https://github.com/RolifyCommunity/rolify


person Sazzad    schedule 12.01.2015    source източник
comment
Случайно да сте стартирали rake db:migration след стартиране на rails конзолата?   -  person Sanjiv    schedule 12.01.2015
comment
Благодаря ти . Но аз не съм   -  person Sazzad    schedule 12.01.2015
comment
Можете ли да минете модела си тук?   -  person Sanjiv    schedule 12.01.2015
comment
class User ‹ ActiveRecord::Base resourcify rolify #:before_add =› :add_default_role_to_user #resourcify # Включете модули за създаване по подразбиране. Други налични са: # :confirmable, :lockable, :timeoutable и :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable has_and_belongs_to_many :roles, :join_table =› :users_roles #after_save :add_default_ role_to_user дефинирана роля ?(роля) end def add_default_role_to_user current_user = User.find_by_id self.id #current_user.add_role :normal_user край край   -  person Sazzad    schedule 12.01.2015
comment
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 } scopify край   -  person Sazzad    schedule 12.01.2015
comment
ето и двата модела.   -  person Sazzad    schedule 12.01.2015


Отговори (4)


Изглежда, че във версия 3.5 не е възможно да се създаде глобална роля, както се случва в предишната версия. Всъщност всеки път, когато се създаде роля, тя се нуждае от resource_type, в момента, тъй като създавате глобална роля, която няма никакъв ресурс, нейните грешки при хвърляне. Но ако създадете роля на инстанция, ще работи. Помислете, че имате някакъв модел, наречен "Post".

Class Post
  resourcify 
end
On Rails console, create 
user = User.first
user.add_role(:admin, Post.first)

Както дадох по-горе сценарии, когато създавам роля, тя ще получи resource_type като „Публикация“. Но във вашия случай ролята не получава resource_type. Така че, ако искате да създадете глобална роля, тогава по-добре ще бъде да премахнете ' validates :resource_type, :inclusion => { :in => Rolify.resource_types } ' от вашия модел на 'роля'

person Sanjiv    schedule 12.01.2015
comment
Коментирането на реда по-долу от модела свърши работа ' # validates :resource_type, :inclusion =› { :in =› Rolify.resource_types }, :allow_nil =› true' - person Chetan Datta; 05.04.2019

Версия >= 3.5 има тези проблеми, за момента използвайте версия rolify 3.4. Ще поправя и ще изпратя заявка за изтегляне.

person Sanjiv    schedule 12.01.2015
comment
Пробвал съм го. Но създава този проблем. Неуловено изключение: недефиниран метод `resource_types' за Rolify:Module. това е редът, където се генерира това. === валидира :resource_type, :inclusion =› { :in =› Rolify.resource_types } - person Sazzad; 12.01.2015

@Sazzad Моля, променете модела за подражание, както е дадено по-долу:

class Role < ActiveRecord::Base 
  has_and_belongs_to_many :users, :join_table => :users_roles belongs_to :resource, :polymorphic => true 

  scopify 
end
person Sanjiv    schedule 12.01.2015

Трябва да позволите на resource_type да бъде nil на вашия Role модел.

За Rails 4 имахме това в нашия Role модел:

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

Започвайки от Rails 5, асоциацията belongs_to се изисква по подразбиране, където се появява optional: true:

belongs_to :resource, :polymorphic => true, optional:true
validates :resource_type,
        :inclusion => { :in => Rolify.resource_types },
        :allow_nil => true
person webaholik    schedule 24.12.2019