2013-02-27 21 views
41

Tôi có một vấn đề đơn giản. Tôi muốn thay đổi một số giá trị trường cho User.find(1) trong bảng điều khiển đường ray của mình.Các vấn đề xác thực khi cập nhật thủ công giá trị thuộc tính trong bảng điều khiển Rails

tôi đã cố gắng:

u = User.find(1) 
u.update_attributes(roles_mask: 3) 

Và có false trả lại. Khi tôi kiểm tra u.errors.full_messages, tôi thấy rằng đó là do có sự cố khi xác thực mật khẩu từ has_secure_password. Làm cách nào để cập nhật thủ công trong bảng điều khiển?

+0

http://apidock.com/rails/ActiveRecord/Persistence/update_attribute –

Trả lời

67

nếu bạn muốn bỏ qua xác nhận, sử dụng

# skip validations but run callbacks 
u.update_attribute :roles_mask, 3 

hoặc

# do the update on the sql so no validation and callback is executed 
u.update_column :roles_mask, 3 
+1

Vì lợi ích đầy đủ, trong Rails 4 bạn có thể sử dụng 'u.update_attributes (roles_mask: 3, password: 'password')' nhưng bạn cần phải biết mật khẩu để đặt nhiều param cùng một lúc. – Alf

10

Bạn cần phải xác thực người dùng đầu tiên sau đó bạn có thể cập nhật cho người dùng có một cái nhìn here

u = User.find(1) 
u.authenticate("password") 
u.update_attributes(roles_mask: 3) 

Hoặc nếu bạn muốn bỏ qua các xác thực bạn có thể làm như sau;

u = User.find(1) 
u.update_attribute :roles_mask, 3 
5

Bạn có thể thử update_attribute(:roles_mask, 3) hoặc update_column(:roles_mask, 3).

3

Bạn có thể có một cái gì đó như thế này

Post.find(1).comments.first.update(body: "hello") 

hoặc

@u = Post.find(1) 
@u.comments.first.update(body: "hello") 

nơi bình luận là tên của bảng bình luận, cơ thể là tên của cột trong bảng nhận xét.

này áp dụng khi bạn đã lồng thuộc tính

post.rb

has_many: comments 
accept_nested_attributes_for: comment 

comment.rb

belongs_to: post 
Các vấn đề liên quan