2014-02-11 2 views
0

Я пытаюсь ограничить доступ к определенному атрибуту при обновлении.Rails Controller Params - пользовательский метод обновления для CanCan работает

Администратор имеет право обновить все из Need в любое время они хотят, кроме они могут только обновить Need «s is_public BOOL только если need_state является in_progress.

CanCan не позволяет ограничивать действие обновления на основе определенных атрибутов, которые устанавливаются ... поэтому я думал, что только для этого можно сделать специальный метод, называемый set_is_public.

Я получил свою форму призвание к нему, и он посылает следующую Params:

{"utf8"=>"✓", 
"authenticity_token"=>"2u9AZ7AJDYQrXm3LubMAxlxhjbsQ14myUTyOSyvoKzk=", 
"need"=>{"id"=>"5", 
"is_public"=>"true"}, 
"commit"=>"Set as Public"} 

Как вы идти об обновлении этой потребности в действии в контроллере?
Я не могу понять, как читать эти Params в и:

  • Найти необходимость на основе идентификатора;
  • Обновите свой атрибут is_public на значение параметра is_public.

ответ

1

В PARAMS вы вывесили показать объект вложенную хешированную, так что вы должны просто нужно сделать что-то вроде:

the_need = Need.find(params["need"]["id"]) 
the_need.is_public = params["need"]["is_public"] 
the_need.save 

Я надеюсь, что помогает!

Edited добавить: вам, возможно, придется иметь дело с ограничениями параметров, в зависимости от версии Rails, один метод является перед фильтром, который делает:

params.require(:need).permit(:id, :is_public) 

Просьба уточнить ваш вопрос, если это не помогает

+0

Большое спасибо за ответ! Я знаю, что это звучит так просто, но это вызвало у меня несколько часов задержки ... Он показывает: «Не удалось найти Need without ID», хотя я могу видеть в списке параметров, в котором он проходит: {«utf8» => "✓", "authenticity_token" => "2u9AZ7AJDYQrXm3LubMAxlxhjbsQ14myUTyOSyvoKzk =", "потребность" => { "ID" => "5", "is_public" => "истина"}, "фиксации" => «Установить как общедоступный»} –

+0

включить отладчик gugg отладчика «gem debugger» в файле gem и вызвать метод «отладчик», который очень поможет вам, когда вы не сможете понять, что происходит в фоновом режиме. –

+1

Попробуйте: 'params.require (: need) .permit (: id,: is_public)' –

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