Có móc hoặc gọi lại mà tôi có thể triển khai sao cho ngay sau khi người dùng được tạo, tôi muốn gọi một số mã tùy chỉnh?phát sinh sau khi tạo móc
Tôi đã thử móc sau khi xác nhận trong mô hình người dùng nhưng điều đó không hiệu quả.
Có móc hoặc gọi lại mà tôi có thể triển khai sao cho ngay sau khi người dùng được tạo, tôi muốn gọi một số mã tùy chỉnh?phát sinh sau khi tạo móc
Tôi đã thử móc sau khi xác nhận trong mô hình người dùng nhưng điều đó không hiệu quả.
Sử dụng gọi lại chuẩn after_create
được cung cấp bởi Rails.
class User < ActiveRecord::Base
after_create :do_something
def do_something
puts "Doing something"
end
end
Sử dụng gọi lại hoàn toàn hợp pháp nếu bạn đang xử lý trạng thái nội bộ của mô hình bạn đã tạo.
Sau khi tạo User
, tôi cần tạo mặc định Team
. Bạn nên sử dụng tránh sử dụng các cuộc gọi lại để đối phó với các đối tượng khác.
callbacks "after_ *" chủ yếu được sử dụng liên quan đến việc lưu hoặc duy trì đối tượng. Khi đối tượng được lưu, mục đích (nghĩa là trách nhiệm) của đối tượng đã được đáp ứng, và vì vậy những gì chúng ta thường thấy là các cuộc gọi lại nằm ngoài phạm vi trách nhiệm của nó và đó là khi chúng ta gặp phải vấn đề.
Trong trường hợp này nó tốt hơn để hành động trên bộ điều khiển, nơi bạn có thể thêm chức năng của bạn trực tiếp, hoặc delegate to a service cho một giải pháp thậm chí sạch hơn:
# shell
rails g devise:controllers users
# config/routes.rb
devise_for :users, controllers: { registrations: "users/registrations" }
# app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
after_action :create_default_team, only: :create
private
def create_default_team
Team.create_default(@user) if @user.persisted?
end
end
Tôi đang sử dụng Rails 4 với lập mưu 3.5 với confirmable
và phải làm điều này do nhiều bất ngờ khác nhau.
class User < ActiveRecord::Base
# don't use after_create, see https://github.com/plataformatec/devise/issues/2615
after_commit :do_something, on: :create
private
def do_something
# don't do self.save, see http://stackoverflow.com/questions/22567358/
self.update_column(:my_column, "foo")
end
end
Tôi làm cách nào để sử dụng quyền này để truy cập người dùng? Ví dụ: tôi muốn cung cấp cho người dùng vai trò mặc định bằng cách sử dụng Royce, do đó, nó chỉ là '@ user', vì vậy tôi có thể thực hiện '@user.add_role: user' – Un3qual
@ Un3qual' self' –
Cảm ơn! Tôi cảm thấy thực sự ngu ngốc bây giờ. – Un3qual