railsのform_forヘルパーは以下のように使いますよね
= form_for(@post) do |f| = f.label :title = f.text_field :title
こう書いておけば出力されるhtmlは
大体こんな感じになるかと。
でrailsの便利なところはform_forに渡してるモデルオブジェクトが、空なのかDBのレコードから生成されたのかを判別して、actionの属性値をよしなに変更してくれるところですよね。
つまりroutesに
resouces :posts do end
と書いてあれば 新規作成時は action="/posts"
だし編集画面では action="/posts/1"
になると。
でもこれが namespace 付きのroutesだとうまく行かなくて困りました。
管理画面を作る場合とかだと /admin/posts にしたくて
namespace :admin do resources :posts do end end
と定義しておいて、form_for で生成したフォームを上記のままにしておくと、undefined method `posts_path' と怒られてしまう。 一瞬下記のやり方?とか思ったんですがrailsに限ってそんなことないよね…
= form_for params[:action] == 'new' ? admin_posts_path : edit_admin_post_path(@post) do |f| = f.label :title = f.text_field :title
ぐぐったら出てきた。
Rails Routes Namespaces and form_for - Stack Overflow= form_for [:admin, @post] do |f|...
だってさ!
配列で指定するんですか。なるほどこれで admin_posts_path と edit_admin_post_path を切り替えてくれるんですね。
ということは…やってみた。
namespace :hoge do namespace :fuga do namespace :foo do namespace :bar do resources :hellos do end end end end end
= form_for [:hoge, :fuga, :foo, :bar, @hello], do |f| = f.label :name = f.text_field :name
成功\(^o^)/
0 コメント:
コメントを投稿