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. pathanddirectory_name+, notと連結し,ます。おそらく、新しいユーザーのunless作成時に新しいフォルダーを作成するだけであり、各ユーザーには一意のid.
于 2013-10-02T16:26:38.250 に答える