##開発環境
Rails(5.2)
Ruby(2.4)
MySQL
##ファイルアップロードにおいて利用した技術
Active Storage
##背景
Railsで3つのファイルアップロードをさせ、そのファイルをPythonプログラムにコマンドライン引数として渡して、シェル経由で実行させる。この結果をWebに公開するということを目的にやっています。
##疑問点
コントローラーのcreateアクションで取得した各ファイルのフルパスをshowアクションで利用したいと考えています。
その方法についてご教授いただきたいです。
##ソースコード
ContextsController
Ruby
1class ContextsController < ApplicationController 2 def new 3 @context = Context.new 4 end 5 6 def create 7 @context = Context.create context_params 8 @path_info = [] 9 tempfile_1 = params[:context][:files][0].path 10 tempfile_2 = params[:context][:files][1].path 11 tempfile_3 = params[:context][:files][2].path 12 @path_info.push(tempfile_1) 13 @path_info.push(tempfile_2) 14 @path_info.push(tempfile_3) 15 16 redirect_to context_path(@context.id) 17 end 18 19 20 21 def show 22 @context = Context.find(params[:id]) 23 @file_result = ` python3 /Users/~省略~/test.py "#{ファイルのフルパス }" "#{ファイルのフルパス }" "#{ファイルのフルパス }" ` 24 end 25 26 27 private 28 def context_params 29 params.require(:context).permit(files: []) 30 end 31 32 def params_info 33 params[:context].permit! 34 end 35 36end
##自分で考え、調べているが、答えが見つからないこと
・アクションの遷移に伴って、paramsには情報を含めずに、別の形でクラスインスタンスメソッド間でのやりとりをする方法を探す。
→最初は、paramsに連結させて飛ばそうとしていましたが、連結させるとルーティングエラー が出てしまったので、この方法を考えた。
・クラスインスタンスメソッド(createアクション)が呼ばれた場合、欲しい値を取得するためのメソッドを新たに定義し、クラスインスタンスメソッド(showアクション)でこのメソッドを呼び出して、欲しい情報を取得する。
→「createメソッドが呼ばれたら」を条件に、if文を作成し、そこでparamsに含まれる情報から欲しい情報を取得する。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/02 02:30
2019/12/03 12:45