ruby-on-rails - 从设计中覆盖注册 Controller 时,是否可以在创建操作中访问新创建的用户?

标签 ruby-on-rails ruby ruby-on-rails-3 devise mkdir

我正在尝试在用户注册后立即创建一个文件夹,因此我覆盖了注册 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 。

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

如果能得到任何帮助,我将不胜感激。

最佳答案

你真的应该在你的操作的 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 Controller 可以访问当前的 resource(在本例中代表 current_user),检索 resource.id 并使用它相反。
  3. pathdirectory_name+ 连接在一起,而不是 ,。不需要 unless 条件,因为您大概只是在创建新用户时创建新文件夹,并且每个用户都有一个唯一的 id

关于ruby-on-rails - 从设计中覆盖注册 Controller 时,是否可以在创建操作中访问新创建的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19140748/

相关文章:

ruby-on-rails - 仅为新条目构建嵌套字段

javascript - 我 ajax a Rails 表单后未显示验证错误

ruby-on-rails - 在不编辑源代码的情况下调用方法并从 Rails 控制台启动调试?

ruby-on-rails - API 的时尚 rocco 文档 - 类似 stripe.com- ?

ruby-on-rails - 使用我的排行榜。可以最大限度地减少工作量

ruby-on-rails - 如何将数据属性添加到 Rails 单选按钮?

ruby-on-rails - Ruby on Rails 按 id(和版本?)排序

ruby-on-rails - 如何在 Ruby 中用 map 重构每个函数?

ruby-on-rails - 逐步在 ruby​​onrails 上使用 paypal 创建一个简单的结帐

ruby-on-rails - rails 3 : How to respond_with csv without having a template file?