14
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

resourcesでネストした場合のform_forメソッドの使い方

Last updated at Posted at 2017-04-04

概要

映画の詳細ページから、その映画に対するレビューが書けるアプリケーションを作成する。

つまり、
レビューするには、reviews_controller.rbのnewアクションでreviewインスタンスを生成。createメソッドで保存する必要がある。
作成したファイルは以下。

config/routes.rb

resources :users do
  resources :products do
    resources :reviews
  end
end

new.html.erb

<%= form_for ( [@user, @product, @review ] ) do |f| %>
  (中略)
<% end %>

review_controller.rb

def new
  @user = User.find(4)
  @product = Product.find(2)
  @review = Review.new
end

疑問

new.html.erbファイルで引数を3つ指定している。この引数がどのように処理されているのか不透明であったので、調べてみた。

このアプリケーションの場合、レビューをするには、
new.html.erbのform_forメソッドから情報を入力し、送信する。
送信先のURLは、新規レビューであるから
/users/:user_id/products/:product_id/reviews
となる。

form_forメソッドに引数としてreviewインスタンスを渡すだけでは、user_idとproduct_idが指定されずエラーとなる。
form_forメソッドに引数として保存されたuserインスタンスとproductインスタンスを渡すことで、自動的にパスを指定してくれる。

結論

form_forメソッド便利。

参考

山田祥寛 Ruby on Rails4 アプリケーションプログラミング 技術評論社 2015年5月 第1版 p.104

14
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?