2012-03-15 32 views
8

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.

+2

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 đó. –

Trả lời

3

Có một attr_accessor không đúng tiêu chuẩn: admin trong mô hình của tôi những gì còn lại từ một nỗ lực trước lúc nhận này để làm việc. Tôi đã bỏ qua nó. Loại bỏ nó đã sửa nó.

Vì vậy, upshot là đây là một cách khá đơn giản để có được vai trò năng động làm việc trong Rails 3.2.

Các vấn đề liên quan