LoginSignup
5
5

More than 3 years have passed since last update.

Railsでネストされたリソースのform_forを書く

Last updated at Posted at 2017-12-26

ネストされたリソースに対してform_for

課題

Railsのルーティングでよくある

  • 管理画面のURLを/admin/~にしたい
  • 1:NのリソースをURLでも表現したい

といった場合

# routes.rb
scope '/admin' do
  resources :topics do
    resources :comments
  end
end

これで/admin/topics/:topic_id/commentsというルーティングが出来るわけですが、Commentモデルのform_forを書こうとした場合に問題が起こります。

# View
= form_for @comment

これだと NoMethodError - undefined method 'comments_path' とエラーになってしまいます。
form_forは引数に渡したオブジェクトから自動でaction属性のURLを生成しますが、ルーティングまでは考慮してくれません。

解決方法

ルーティングでネストされたリソースに対してform_forを書くには引数を配列にしてネストを表現します。

# View
= form_for [:admin, @topic, @comment]
<!-- 出力されるHTML -->
<form action="/admin/topics/1234/comments" method="post">
5
5
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
5
5