poyopoyo0のブログ

poyopoyoのブログ

Web 関連のメモ書きブログです。

【 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

のようにアロー記法で書いてやればいい。