【 Rails 】View から Controller に値を受け渡すには
Controller から View に値を受け渡すには、 Controller で値を定義してやればいいだけなのだけど、今度は逆に View から Controller に値を受け渡したいときはどのようにやればいいか、長いこと謎だった。
こちら stackoverflow.com の Answer を見て、ようやく値の受け渡し方が分かったので、メモ書き。
View に
link_to "リンク名", アクション名_コントローラー名_path(受け渡したい変数の名前)
と書いて、 Controller のアクションに
def アクション名 params[:該当するparam名] end
と書いてやれば、値の受け渡しができる。
具体的に今回は
View:
link_to "リンク名", new_report_path(@report)
Controller:
def new @report = Report.new @report = Report.find_by(id: params[:format]) end
としてやれば、値を取得することができた。
params の中に何を入れてやればいいか分からないときは、 Controller 側に binding.pry
を入れて Pry コンソールを立ち上げた後 params
と打ち込めば
[1] pry(#<ReportsController>)> params => {"action"=>"new", "controller"=>"reports", "format"=>"4"}
のように表示してくれるので、受け渡して欲しい値の変数名を探す。今回は format
がそれらしき変数名なので、 Controller に params[:format]
と打ち込むと View 側の @report
の id を受け取ることができた。
受け渡す値の名前を明示したり、複数の値を受け渡したいときは、 こちら sandragon.hatenablog.com を参考にして
View:
link_to "リンク名", new_report_path(:report_id => @report.id, :params_controller => params[:controller])
Controller:
def new @report = Report.new @report = Report.find_by(id: params[:report_id]) @params_controller = params[:params_controller] end
のようにアロー記法で書いてやればいい。