рубин на рельсах - PullRequest
       14

рубин на рельсах

2 голосов
/ 16 апреля 2010

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

class User
  attr_accessible :available_to_admins, :name
end

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

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

User.update_attributes(params[:user])

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

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

Ответы [ 2 ]

2 голосов
/ 16 апреля 2010

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

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
0 голосов
/ 21 июля 2012

По этой теме был интересный Railscast:

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

...