2012-03-19 4 views
18

Tôi đang sử dụng Rails 3 với bản phát hành mới có thể xác nhận.Làm cách nào để bỏ qua nhu cầu xác nhận cập nhật địa chỉ email với sự cố?

Tôi muốn người dùng thường xác nhận địa chỉ email của họ. Khi tạo người dùng mới, tôi có thể bỏ qua email xác nhận với:

user.skip_confirmation! 

Tuy nhiên, đôi khi tôi cần phải thay đổi email theo cách thủ công thay mặt người dùng. Và điều này dường như không hoạt động khi thay đổi email. ví dụ:

@user = User.find_by_email('[email protected]') 
@user.email = '[email protected]' 
@user.skip_confirmation! 
@user.save! 

Điều này vẫn yêu cầu người dùng xác nhận email. Email không được cập nhật. Và nghĩ ra là gửi một email.

Bất kỳ ý tưởng nào? Cảm ơn

Trả lời

57

Để cập nhật, bạn có thể gắn bó với update_attributes, hay chỉ là một đồng bằng saveskip_reconfirmation! (chú ý 'tái' trong tái xác nhận).

@user.skip_reconfirmation! 

respond_to do |format| 
    if @user.update_attributes(params[:user]) 
    ... 
end 
+0

Cảm ơn! Chỉ cần những gì tôi đang tìm kiếm. –

+0

Cảm ơn lời khuyên! –

+0

Cảm ơn rất nhiều :) Nó làm việc cho tôi :) –

11

Thử đặt Devise.reconfirmable hoặc User.reconfirmable (hoặc bất kỳ mô hình nào của bạn) thành false. Bạn có thể đặt nó trên config/initializers/devise.rb trên dòng này:

# If true, requires any email changes to be confirmed (exctly the same way as 
# initial account confirmation) to be applied. Requires additional unconfirmed_email 
# db field (see migrations). Until confirmed new email is stored in 
# unconfirmed email column, and copied to email column on successful confirmation. 
config.reconfirmable = true 

Bạn cũng có thể sử dụng phương pháp update_column tích cực của Record, giúp tiết kiệm một lĩnh vực mà không cần chạy callbacks hoặc kiểm chứng thực.

+0

Tôi muốn reconfirmable, những gì tôi muốn làm là có khả năng bỏ qua reconfirmable khi cập nhật một email cho một hồ sơ người dùng hiện có – AnApprentice

+0

Tôi đã cập nhật câu trả lời để sử dụng phương thức 'update_column'. –

1

Nếu bạn muốn bỏ qua chỉ là thông báo email, thực hiện điều này:

@user.skip_confirmation_notification! 
@user.save 
5

Bạn có thể sử dụng loại mã trong mô hình của bạn # models/users.rb. Điều này sẽ vô hiệu hóa email xác nhận lại về cập nhật:

def postpone_email_change? 
    false 
end 

hoặc trong điều khiển của bạn

def update 
    user.email = params[:user][:email] 
    user.skip_confirmation_notification! 

    if user.save 
    user.confirm 
    end 
end 
+0

mà thực sự hoạt động! – ilgam