前提・実現したいこと
現在railsで簡単な投稿機能を実装しています。
まずサイトのトップにて6個の部屋があり、その中でそれぞれ投稿機能があるといった感じです。
そのためたとえば1の部屋での新規投稿を作成する時のurlは/posts/1/newとなっています。
部屋の番号は:genreというパラメータに格納してあります。
そこで投稿を作成するときにバリデーションに引っかかった場合再度投稿フォームを表示したいのですが
render action:"new" とすると、1回目の送信ではうまくいくのですが、この時点でurlが/posts/1/createに変化するため、2回目に送信するとエラーが出てしまいます。
何度間違った送信をしてもurlが変化しないようにするにはどうすれば良いでしょうか。
発生している問題・エラーメッセージ
エラーメッセージ No route matches [POST] "/posts/create"
該当のソースコード
コントローラとnewアクションによって呼び出されるnew.html.erbは以下のとおりです
postsController
1 2 def index 3 posts = Post.where(genle: params[:genre]) 4 @posts = posts.page(params[:page]) 5 @genre = params[:genre] 6 end 7 8 def new 9 @genre = params[:genre] 10 end 11 12 def create 13 @post = Post.new(text: params[:text], genle: params[:genre]) 14 if @post.save 15 flash[:notice] = "投稿できました" 16 redirect_to controller: 'posts',genre: params[:genre] , action: 'index' 17 else 18 render action:"new" 19 end 20 end
<!--new.html.erb--> <%= form_tag("/posts/#{@genre}/create") do %> <!-- 投稿用のテキストエリア --> <% end %>
試したこと
ユーザーの登録機能の方でも同じことが起こったが、そっちはrenderの引数に登録フォームのurlを直接入力したらできたので、こっちでも同じようにやろうと思ったがurlに#{params[:genre]}を入れるとエラーが起こる。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/29 08:27