前提・実現したいこと
ここに質問の内容を詳しく書いてください。
初歩的なSNS機能を作っています。そこでフォーム作成のところをForm_tagからForm_forに書き換えようと思っているのですがedit画面からフォームの値を保存しようとするとうまくいきません(新規作成の方はDBに値が保存されうまくいきます。)。恐らく、_form.html.erb にアクションを指定している為だと思うのですが、ここのアクションの指定を外すと「NoMethodError in Posts#edit」と出てしまいます。
発生している問題・エラーメッセージ
もともとのエラーメッセージ No route matches [PATCH] "/posts/create" 下記に修正すると「NoMethodError in Posts#edit」と出てしまいます。 <%= form_for @post, url: {action: "create"} do |f| %> ↓ <%= form_for @post do |f| %>
Route
Rails.application.routes.draw do get '/' => 'home#top' get 'posts/index' get 'posts/new' get 'posts/:id' => 'posts#show' post 'posts/create' get 'posts/:id/edit' => 'posts#edit' end
Posts Controller
class PostsController < ApplicationController def index @posts = Post.all.order(created_at: :desc) end def show @post = Post.find_by(id: params[:id]) end def new @post = Post.new end def create @post = Post.new(post_params) @post.save redirect_to("/posts/index") end def edit @post = Post.find_by(id: params[:id]) end def update @post = Post.find_by(id: params[:id]) @post.content = post_params @post.save redirect_to("/posts/index") end private def post_params params.require(:post).permit(:content) end end
_form.html.erb
<%= form_for @post, url: {action: "create"} do |f| %> <%= f.text_area :content %> <%= f.submit "Memo" %> <% end %>
new.html.erb & edit.html.erb
<%= render "form" %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/07 15:07
2018/10/08 02:10
2018/10/08 02:21
2018/10/08 06:05