0

RPG 웹 사이트가 있는데 사용자가 프로필을 편집 할 때 등록 할 때 이름을 설정할 수있게하려고합니다. 하지만 관리자로 편집 할 수 있어야합니다.업데이트 할 속성을 보호하십시오.

업데이트 작업에서 update_attributes를 사용하기 때문에 제공하는 고전적인 형식을 사용하지 않고 first_name을 업데이트 할 수 있다고 생각합니다.

ActiveRecord 유효성 검사 또는 컨트롤러에서이 작업을 수행 할 수있는 방법이 있습니까?

미리 감사드립니다.

답변

3

User 모델에 attr_accessible :name, :as => :admin을 추가하고 가입 컨트롤러에서 @user.update_attributes(params[:user], :as => :admin)을 사용하십시오. update 작업은 :as => :admin 옵션없이 @user.update_attributes(params[:user])을 사용해야합니다. 이 주제에 대한

더 : Rails 3.1 Overview

+0

정말 대단합니다! 다른 액션에서': as => : signup'과': as => : admin'을 사용할 수 있다고 생각하십니까? 그리고 사용자 attr_accessible : signup 및 : admin? – Cydonia7

+0

네, 가능해야합니다! –

0

당신은 로그인 한 사용자에 액세스 할 경우 컨트롤러이기 때문이 컨트롤러를 통해 할 쉽습니다. 그래서, 당신의 컨트롤러 :

# When the form is submitted 
unless @current_user.is_an_admin? 
    # List of attributes to allow non-admins to change 
    allowed_fields = %w[allowed_field_1 allowed_field_2] 
    # Remove any non-allowed fields from the params 
    params[:user].delete_if {|key, value| !allowed_fields.include?(key.to_s)} 
end 
@user.update_attributes(params[:user]) 

당신 사용자 모델을 통해 그것을 할,하지만 당신은 추가 다음 조건 검증의 무리를 모델로 편집 사용자의 상태를 통과 할 수있는 방법을해야 할 것 .

+0

동의하지 마십시오! 컨트롤러는 깨끗해야하며 이것은 분명히 모델을위한 작업입니다. –

+0

Eh .... IMHO,이 모델을 모델에 전달하면 MVC가 중단됩니다. 현재 사용자와 관리자 상태는 본질적으로 세션 변수에 의존하며 세션은 본질적으로 모델이 아닌 컨트롤러의 일부입니다. 두 모델이 직접 연관되어 있지 않으면 모델 메서드는 다른 모델의 상태에 의존해서는 안됩니다. –

관련 문제