ruby on rails ввод параметров

У меня есть вопрос о ruby ​​on rails и процессе назначения переменных с использованием переменной params, переданной через форму.

class User
  attr_accessible :available_to_admins, :name
end

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

После этого, когда я захочу сохранить ваши данные, я просто сделаю:

User.update_attributes(params[:user])

Если вы администратор, то нет проблем, params[:user] будет содержать имя и available_tu_admins, а если нет, то только ваше имя.

Поскольку available_to_admins является параметром attr_accessible, как мне запретить пользователям без прав администратора вводить переменную, содержащую входные данные available_to_admins, с их новым значением?


person Julien P.    schedule 16.04.2010    source источник


Ответы (2)


а. Вы можете проверить роль пользователя в контроллере.

class User
  # remove available_to_admins from attr_accessible
  attr_accessible :name
end

def update
  @user = User.new(params[:user])
  @user.available_to_admins = params[:user][:available_to_admins] if current_user.role == 'Admin'
end

б. Вы можете добавить обратные вызовы before_save/before_update в свою модель

class User
  # remove available_to_admins from attr_accessible
  attr_accessible :name
  before_save :check_role
  before_update :check_role
  def check_role
    self.available_to_admins = params[:user][:available_to_admins] if current_user.role == 'Admin'
  end
end
person fl00r    schedule 16.04.2010
comment
Большое спасибо за ваш ответ (ы) fl00r! - person Julien P.; 17.04.2010

Был интересный Railscast на эту тему:

динамический attr_accessible

person Luke W    schedule 21.07.2012