Существует ли какое-либо руководство по Rails 3.2, в котором рассматривается назначение атрибута admin пользователю? - PullRequest
2 голосов
/ 16 марта 2012

Отказ от ответственности: я использую Rails 3.2.В частности, в книге Rails 3 in Action:

Модель User имеет attr_accessible attr_accessible: email,: password, password_confirmation,: Remember_me

Модель пользователя НЕ имеет: admin, поэтомуне может быть назначен массово как часть params [: user].


Блок form_for внутри app / views / admin / users / _form.html.erb устанавливает элемент флажка, чтобы разрешитьадминистратор для установки пользователя в качестве администратора:

`<% = f.check_box: admin%> <% = f.label: admin," Является ли администратор? "%>


Приложение / контроллеры / admin / users_controller.rb

@user = User.new(params[:user])
@user.admin = params[:user][:admin] == "1"  
if @user.save

Строка @ user.admin = params [: user] [: admin] == "1" должен установить для атрибута admin значение true, но генерирует ошибки массового назначения, которые мешают мне изменить атрибут @ user.admin на true.


Я могу установить для атрибута admin значение true без массового назначения через консоль, наряду с определением метода в модели User:

def make_admin
  self.admin = true
end

Это выполняет то же самое,ничего фантастического.

Как получить атрибут admin, присвоенный TRUE, чтобы пользователь мог работать с использованием view и controller через флажок?

Есть ли способ удалить или отделить параметр admin от params [: user] [: admin])?

Ответы [ 2 ]

2 голосов
/ 17 марта 2012

Комментирование строки config.active_record.mass_assignment_sanitizer = :strict в файле development.rb продвинуло меня вперед.

1 голос
/ 14 января 2013

Комментировать защиту массовых назначений - плохая идея.

Почему бы вам не добавить :admin в список attr_accessible, если вы хотите, чтобы он был назначен по массе?

А для информации, когда вы набираете это:

@user = User.new(params[:user])
@user.admin = params[:user][:admin] == "1"  
if @user.save

Не @user.admin = ... выдает ошибку массового присваивания, а строка User.new(params[:user])

В любом случае, если вы хотите получить значение флажка, но не хотите его массово назначать, попробуйте следующее:

admin = params[:user].delete(:admin)
@user = User.new(params[:user])
@user.admin = admin == "1"  
if @user.save

Не забудьте снова включить защиту массовых назначений;)

...