ここに、Ruby での文字列補間に関する知識に基づいて動作するはずのコードがあります。モデルクラス内:「s3_file」
基本的に私が達成しようとしているのは、ファイルを AWS S3 に保存するときに、次の文字列補間を使用して実行時に作成されるフォルダーの下に保存したいということです。Devise と cancan を承認と認証の gem として使用しています
以下のコードは動作します:
Paperclip.interpolates :prefix do |attachment, style|
"#{Date.today.to_s }/system"
end
has_attached_file( :upload,
:path => ":prefix/:basename.:extension",
:storage => :s3,
:s3_credentials => {:access_key_id => "XXX",
:secret_access_key => "XXX"},
:bucket => "XXX"
)
しかし、ユーザーのメールを取得して、それを Paperclip ブロックに挿入しようとしています。このコードは期待どおりに機能しません。このコードの結果は例外ではありませんが、@curr_user_email は常に null であるため、AWS S3 のフォルダーには名前がありません。ただし、メソッドはフォルダーを作成します。どうすればこれを修正できますか?
このコードはまだ機能しません
if(@curr_user_signed_in)
@aPrefix = "#{Date.today.to_s }/#{@curr_user_email}"
else
@aPrefix = "#{Date.today.to_s }/system"
end
Paperclip.interpolates :prefix do |attachment, style|
@aPrefix
end
has_attached_file( :upload,
:path => ":prefix/:basename.:extension",
:storage => :s3,
:s3_credentials => {:access_key_id => "xxx",
:secret_access_key => "xxx"},
:bucket => "xxx"
)
私のコントローラーには、次のコードがあります。
def index
@s3_files = S3File.all
@curr_user_signed_in = false
if(user_signed_in?)
@curr_user_signed_in = true
@curr_user_email = current_user.email
end
respond_to do |format|
format.html # index.html.erb
format.json { render json: @s3_files }
end
end
したがって、本当の問題は、これらの @curr_user_signed_in = true @curr_user_email = current_user.email が設定されており、null ではないことですが、何らかの理由でそれらを paperclip ブロックに読み込むことができないことです