사용자가 프로필 정보를 업데이트 할 수있는 양식이 있지만 일부 정보가 변경되는 것을 방지하고 싶습니다. 또한 컨트롤러 코드를 매우 간단하게 유지하고 싶습니다. 내 사용자 컨트롤러의 업데이트 작업에서 다음 코드를 가지고 있습니다.필드에 양식을 추가하는 사용자 양식을 중지하는 방법은 무엇입니까?
def update
@user = Users.find params[:id]
if @user.update_attributes(params[:user])
flash[:notice] = 'Update successful.'
redirect_to user_path(@user)
else
render :action => :edit
end
end
이것은 매우 깨끗하고 간단합니다. 그러나 사용자가 속성과 동일한 이름을 가진 필드를 양식에 추가하고이를 사용하여 금지 된 속성을 수정할 수 있다는 점이 마음에 들지 않습니다. 이 작업을 수행하는 간단한 방법이 있습니까? 아니면이 작업을 직접 수행 할 방법을 고안해야합니까? 내가 고려하고
한 가지 방법은 hash-based message authentication code, 모든 형태의 요소 이름을 사용하여 해시 값을 생성하는 것이다. 이 메시지 액세스 코드는 양식의 숨겨진 값입니다. 그런 다음 양식이 제출되면 매개 변수 해시의 키 이름을 사용하여 메시지 액세스 코드 (MAC)를 다시 계산합니다. 두 개의 MAC이 다르거 나 첫 번째 MAC이 매개 변수 해시에없는 경우 오류가 발생합니다. 나는 이미 거기에 이미 있고 쉬운 해결책이 있다면 이것을 구현하는 데 시간을 낭비하지 않을 것이다.
감사합니다.
에서 찾을 수 있습니다. attr_accessible 및 attr_protected에 대해 알고 있지만, 불필요한 복잡성을 앱에 추가한다고 생각합니다. 예를 들어 사용자는 사용자 이름을 수정할 수 없어야하지만 관리자는 모든 사용자의 이름을 수정할 수 있어야합니다. '@ user.update_attribute (: login, params [: login] if current_user.role? : admin') 이런 종류의 코드를 여러 줄 사용하면 모든 컨트롤러에 들어갈 필요가 있습니다. 그 많은 로직이 이미 내 캉캉 능력 파일에 정의 된, 그래서되는 코드 중복의 공정한 금액이있을 것 – Max
무엇에 대해 -. http://enlightsolutions.com/articles/whats-new-in-edge-scoped- 대량 할당 된 레일-3-1 – Nate
덕분에 네이트, 즉 정확히 내가 무엇을 찾고. – Max