2015-03-10 2 views
0

При попытке создать на модели с канкан, установленным в manage: all Я постоянно получаю эту ошибку:Fix Rails Gem CanCan ошибка для ActiveModel :: ForbiddenAttributesError

ActiveModel::ForbiddenAttributesError - ActiveModel::ForbiddenAttributesError:

Я нашел затруднительное онлайн here.

Это вставляет этот код в мой контроллер приложений:

before_filter do 
    resource = controller_name.singularize.to_sym 
    method = "#{resource}_params" 
    params[resource] &&= send(method) if respond_to?(method, true) 
end 

Это приводит к моему вопросу. У меня две модели с ассоциацией belongs_to_has_many и метод, который добавляет пользователя в группу.

Когда я хочу добавить пользователя в группу, используя add_user, который принимает идентификатор группы и объект пользователя, я получаю эту ошибку.

Процедура вызывается:

<%= link_to 'Add', add_user_group_path(group: @group, user_id: id) %> 

Метод выглядит следующим образом:

def add_user 
    group = Group.find(params[:id]) 
    user = User.find(params[:user_id]) 
    group.users << user 
end 

И это ошибка:

Parameters: {"group"=>"16", "id"=>"16", "user_id"=>"332"} NoMethodError - undefined method `permit' for "16":String:

Что такое before_filter способ сделать это приведет к этой ошибке?

================ UPDATE ===================

Я в конечном итоге выяснить это ,

Поскольку идентификатор группы автоматически передается в вызове add_user от контроллера я должен был изменить эту строку:

<%= link_to 'Add', add_user_group_path(group: @group, user_id: id) %> 

к:

<%= link_to 'Add', add_user_group_path(user_id: id) %> 

И теперь он работает. Оказывается, когда вы передаете объект @group, параметр «group => x» получает синтаксический анализ.

+0

Есть причина, вы используете '' CanCan' над CanCanCan'? – ptd

+0

Пожалуйста, скопируйте содержимое вашего контроллера, чтобы мы могли видеть, что там происходит. –

+0

Я действительно никогда не слышал о CanCanCan – essefbx

ответ

1

CanCan не работает с Rails4. Используйте CanCanCan, и вам не нужно какое-либо из этих способов обхода. Просто выполните несколько следующих методов, как то, что мы обычно делаем в Rails4.

create_params or update_params (depending on the action you are performing)

_params such as article_params (this is the default convention in rails for naming your param method)

resource_params (a generically named method you could specify in each controller)

Ссылка здесь: https://github.com/CanCanCommunity/cancancan

Смежные вопросы