Tôi có ứng dụng Rails với mô hình người dùng có thuộc tính admin
. Nó bị khóa bằng cách sử dụng attr_accessible
. Mô hình của tôi trông như thế này:Rails 3.2, Phân công khối lượng, Vai trò động?
attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation
attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation, :admin, :as => :admin
Và đây là những gì phương pháp cập nhật của tôi trong bộ điều khiển người dùng của tôi trông giống như:
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user], :as => current_user_role.to_sym)
flash[:notice] = "Profile updated"
redirect_to edit_user_url(@user)
else
render 'edit'
end
end
Tôi có một phương pháp helper trong điều khiển ứng dụng của tôi rằng họ sẽ trả lại vai trò như là một chuỗi :
def current_user_role
@current_user_role ||= current_user.admin? ? "admin" : "default"
end
helper_method :current_user_role
tôi cũng đã thiết config.active_record.whitelist_attributes = true
trong config/application.rb
.
Tôi đã xác minh rằng phương pháp current_user_role
đang trả lại giá trị phù hợp dựa trên trạng thái quản trị viên của người dùng hiện tại. Rails không ném một lỗi gán hàng loạt. Nhưng khi tôi cố gắng cập nhật trạng thái quản trị của người dùng khi đăng nhập với tư cách quản trị viên, Rails thực hiện cập nhật và âm thầm bỏ qua thuộc tính admin
. Kéo bản ghi của người dùng trong bảng điều khiển Rails cho thấy bản ghi chưa được sửa đổi.
Tôi có cảm giác có vấn đề về Ruby hoặc Rails khi chơi mà tôi không biết. Tôi không thể tìm thấy bất kỳ thông tin nào về việc tạo vai trò động. Điều tốt nhất tôi có thể tìm thấy là this.
Nếu tôi hiểu chính xác bạn, bạn đã trả lời câu hỏi của riêng mình. Nếu vậy, bạn nên đăng câu trả lời của mình dưới dạng câu trả lời (không phải là câu trả lời cho câu hỏi của bạn) và chấp nhận câu trả lời đó. –