Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

概要

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

つまり、
レビューするには、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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away