1,作成しているサイト
自分の過去の出来事を日記のように書いて共有するアプリ
2,実現したいこと
- 同一のページに2つの投稿機能をつけたい。
「登録する」ボタンを押したときにはcharactersコントローラのcreateアクションに、「送信する」を押したときにはpostsコントローラのcreateアクションに飛ぶようにしたい。
3,問題
エラーは表示されないが、コマンドプロンプトを確認すると「登録する」ボタンを押したときにpostsコントローラのcreateアクションに飛んでしまっている様子。
どうすれば<%= form_for @character do |f| %>でcharacterコントローラのcreateアクションにつなげられるようになるでしょうか。
よろしくお願いします。
4,対応
form_forの送信先のurlを指定した。
views/posts/new.html.erb
1<h3>新規作成</h3> 2<%= form_for @post, url: post_posts_path do |t| %> 3 <div class="post_field"> 4 <p> 5 <%= t.label :'いつの出来事?' %> 6 <%= t.date_select :year_month, :size => 140 %> 7 8 <%= t.label :'タイトル' %> 9 <%= t.text_field :title, :size => 140 %> 10 11 <%= t.label :'登場人物を選択' %> 12 <%= t.collection_check_boxes :character_ids, Character.all, :id, :character %> 13 </p> 14 15 <p>登場人物を追加する</p> 16 <!-- urlを追加して送信先を明確に指定した --> 17 <%= form_for @character, url: character_posts_path do |f| %> 18 <div class="character_field"> 19 <%= f.label :'名前' %> 20 <%= f.text_field :character, :size => 140 %> 21 </div> 22 <%= f.submit "登録する" %> 23 <% end %> 24 25 <p> 26 <%= t.label :'振り返ろうと思った理由' %> 27 <%= t.text_field :reason, :size => 140 %> 28 29 <%= t.label :'できごとの詳細' %> 30 <%= t.text_field :experiment, :size => 140 %> 31 32 <%= t.label :'書いてみた感想' %> 33 <%= t.text_field :review, :size => 140 %> 34 35 <%= t.label :'公開範囲の設定' %> 36 <%= t.select :setting, [["公開", true], ["非公開", false]], include_blank: "選択して下さい" %> 37 </p> 38 </div> 39 40 <%= t.submit "送信する" %> 41<% end %>
ルーティングでコントローラとアクションを指定した。
routes
1Rails.application.routes.draw do 2 devise_for :users 3・・・・・・・・省略・・・・・・・・・・・ 4 resources :posts do 5 collection do 6 post :character, controller: 'characters', action: 'create' 7 post :post, controller: 'posts', action: 'create' 8 end 9 end 10 11end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/28 12:18