前提
ruby on railsで過去の出来事について投稿するSNSのようなものを製作しています。
postテーブルとcharacterテーブルがcharacters_postテーブルを介して多対多の関係になっています。
説明不足な部分があるかもしれないので、不明点がありましたら質問して頂けますと幸いです。
実現したいこと
- postの編集画面で新しくcharacterを追加した際に、元いた編集画面にリダイレクトされるようにしたいです。
発生している問題・エラーメッセージ
コマンドプロンプトのエラー画面です。
SyntaxError (C:/Users/konku/Desktop/tests/test_life/app/controllers/characters_controller.rb:22: syntax error, unexpected tLABEL, expecting `end' ...ck_location: root_path) notice: '編集できました' ... ^~~~~~~ C:/Users/konku/Desktop/tests/test_life/app/controllers/characters_controller.rb:24: syntax error, unexpected ',', expecting `end' ...(fallback_location: root_path), notice: '編集できませ... ... ^ ): app/controllers/characters_controller.rb:22: syntax error, unexpected tLABEL, expecting `end' app/controllers/characters_controller.rb:24: syntax error, unexpected ',', expecting `end' app/controllers/characters_controller.rb:22: syntax error, unexpected tLABEL, expecting `end' app/controllers/characters_controller.rb:24: syntax error, unexpected ',', expecting `end' app/controllers/characters_controller.rb:22: syntax error, unexpected tLABEL, expecting `end' app/controllers/characters_controller.rb:24: syntax error, unexpected ',', expecting `end'
該当のソースコード
部分的に抜粋しています。
①編集画面のview
posts/edit.html.erb
1<h3>編集</h3> 2<%= form_for @post do |t| %> 3 <%= render 'layouts/error_messages', model: t.object %> 4 <div class="post_field"> 5 <p> 6 <%= t.label :'いつの出来事?' %> 7 <%= t.date_select :date %> 8 </p> 9 10 <p> 11 <%= t.label :'タイトル' %> 12 <%= t.text_field :title, :size => 140 %> 13 </p> 14 15 <p> 16 <%= t.label :'登場人物を選択' %> 17 <%= t.collection_check_boxes :character_ids, Character.all, :id, :name %> 18 </p> 19 20 21 22 <p> 23 <%= t.label :'振り返ろうと思った理由' %> 24 <%= t.text_field :reason, :size => 140 %> 25 </p> 26 27 <p> 28 <%= t.label :'できごとの詳細' %> 29 <%= t.text_field :experiment, :size => 140 %> 30 </p> 31 32 <p> 33 <%= t.label :'書いてみた感想' %> 34 <%= t.text_field :review, :size => 140 %> 35 </p> 36 37 <p> 38 <%= t.label :'公開範囲の設定' %> 39 <%= t.select :setting, [["公開", true], ["非公開", false]], include_blank: "選択して下さい" %> 40 </p> 41 </div> 42 43 <%= t.submit "編集を完了する" %> 44<% end %> 45 46 <p>登場人物を追加する</p> 47 <%= form_for @character, url: character_from_edit_posts_path do |f| %> 48 <%= render 'layouts/error_messages', model: f.object %> 49 <div class="character_field"> 50 <%= f.label :'名前' %> 51 <%= f.text_field :name, :size => 140 %> 52 </div> 53 <%= f.submit "登録する" %> 54 <% end %>
②postコントローラー
posts_controller.rb
1 def edit 2 @post = Post.find(params[:id]) 3 @character = Character.new 4 end
③characterコントローラー
characters_controller.rb
1 def create_from_edit 2 character = Character.new(character_params) 3 character.user_id = current_user.id 4 if character.save 5 redirect_back(fallback_location: root_path) notice: '編集できました' 6 else 7 redirect_back(fallback_location: root_path), notice: '編集できませんでした' 8 end 9 end
④routes
routes.rb
1 resources :posts do 2 collection do 3 post :character_from_new, controller: 'characters', action: 'create_from_new' 4 post :character_from_edit, controller: 'characters', action: 'create_from_edit' 5 get :index_private, controller: 'posts', action: 'index_private' 6 end 7 member do 8 get :show_private, controller: 'posts', action: 'show_private' 9 end 10 end
試したこと
編集しているpostのpost_idをどこかで受け渡す必要があるのかなと考えたのですが、どこに何を追加すべきなのか分からず行き詰まってしまいました。
参考サイト
回答1件
あなたの回答
tips
プレビュー