我正在尝试在用户注册后立即创建一个文件夹,因此我覆盖了注册 Controller (设计)上的创建操作,但我不知道如何访问新创建的用户以创建文件夹这是稍后上传文件的名称。
到目前为止我得到了这个:
class RegistrationsController < Devise::RegistrationsController
def new
super
end
def create
super
create_folder
end
def update
super
end
def create_folder
path = Pathname.new(':rails_root/tmp/')
directory_name = ":current_user"
Dir.mkdir(path, directory_name) unless File.exists?(directory_name)
end
end
路线.rb
devise_for :users, :controllers => {:registrations => "registrations"}
我关注了this覆盖注册 Controller 。
- 我应该将它留在那里还是将其移至创建操作?而不是使用方法
- 这是访问当前用户的正确方式吗?
- 也许在登录时注册更好?
如果能得到任何帮助,我将不胜感激。
最佳答案
你真的应该在你的操作的 after_filter
中完成这个功能,而不是在操作本身中:
class RegistrationsController < Devise::RegistrationsController
after_filter :create_folder, :only => :create
protected
def create_folder
path = Pathname.new(Rails.root.to_s + '/tmp/') #=> Note 1
directory_name = resource.id.to_s #=> Note 2
Dir.mkdir(path + directory_name) #=> Note 3
end
end
注意事项:
- 您检索项目根目录的语法不正确。
:rails_root
不能从单引号内插入 - 而且它不存在,无论如何。请尝试使用Rails.root.to_s
。 ":current_user"
只是一个字符串,它将尝试命名目录:current_user
,这既不是动态的也不是有效的。因为您的 Devise Controller 可以访问当前的resource
(在本例中代表current_user
),检索resource.id
并使用它相反。- 将
path
和directory_name
与+
连接在一起,而不是,
。不需要unless
条件,因为您大概只是在创建新用户时创建新文件夹,并且每个用户都有一个唯一的id
。
关于ruby-on-rails - 从设计中覆盖注册 Controller 时,是否可以在创建操作中访问新创建的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19140748/