4

我正在尝试在用户注册后立即创建一个文件夹,因此我覆盖了注册控制器(设计)上的创建操作,但我不知道如何访问新创建的用户以使用其名称创建文件夹稍后上传文件。

到目前为止,我有这个:

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"}

我按照这个来覆盖注册控制器。

  1. 我应该将它留在那里还是将其移至创建操作?而不是使用方法
  2. 这是访问当前用户的正确方法吗?
  3. 也许在登录时进行注册而不是注册更好?

我会很感激我能得到的任何帮助。

4

1 回答 1

5

你真的应该在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

备注

  1. 您检索项目根目录的语法不正确。:rails_root不能从单引号内插值 - 无论如何它不存在。试试Rails.root.to_s吧。
  2. ":current_user"只是一个试图命名目录的字符串,:current_user它既不是动态的也不是有效的。因为您的 Devise 控制器可以访问当前resource(在这种情况下,代表current_user),所以检索resource.id并使用它。
  3. path将anddirectory_name+, not连接在一起,。不需要unless条件,因为您大概只是在创建新用户时创建新文件夹,并且每个用户都有一个唯一的id.
于 2013-10-02T16:26:38.250 回答