現在railsチュートリアルや他のサイトを参考にしながらアプリを開発している初心者です。
投稿画面において、すべてのフォームを満たして投稿ボタンを押すのですが、このようなエラーがでます。
また、上のほうのエラーメッセージは依然はでていなかったものなのですが、表示されるようになってしまいました。
_form.html.erbも確認したのですが、なぜこのようなメッセージが出るのかわかりません。どなたか原因がわかる方がいらっしゃればご教示いただけないでしょうか。
参考に以下のコードを掲載します。足りないソースがある場合は追加します。
↓ posts_controller.rb ↓
# Applicationcontrollerクラスを継承することで、クラスがコントローラと認識される class PostsController < ApplicationController def index # 追加 # タグが選択されている場合は、タグに関連されているデータを取得、そうでなければ全てのデータを取得(ただし、データの全検索はしてない) @posts = params[:tag_id].present? ? Tag.find(params[:tag_id]).posts : Post.all # page メソッドを呼ぶと引数に指定したページに表示するデータ分だけ取得(デフォルトは、25件) @posts = Post.page(params[:page]) end #ルーティングの変更後に追加 def new @post = Post.new(flash[:board]) end def create # Post モデルを引数のパラメータで初期化(データの保存は指定ない) @post = Post.new( content: params[:content], user_id: @current_user.id ) # 保存の正否をチェック if @post.save # フラッシュ flash[:notice] = "「#{post.title}」の記事が投稿されました!" redirect_to post else redirect_to new_post_path, flash: { post: @post, error_messages: @post.errors.full_messages } end end # findメソッドで、idにひもづくPOSTオブジェクトを取得する def show @post = Post.find(params[:id]) # @comment = @post.comments.new @comment = Comment.new(post_id: @post.id) end # 追加 def edit @post = Post.find(params[:id]) end def update post = Post.find(params[:id]) # モデルの更新は、クラスメソッドのupdateメソッドで行える post.update(post_params) # フラッシュ flash[:notice] = "「#{@post.title}」の記事を更新しました!" # リダイレクト処理 redirect_to @post end # 削除機能 def destroy @post = Post.destroy(params[:id]) # フラッシュ flash[:notice] = "「#{@post.title}」の記事を削除しました!" # 投稿一覧へリダイレクト redirect_to posts_path end private #paramsから欲しいデータのみ抽出 def post_params #params.require(:post).permit(:name, :title, :content) # tag_ids をリストで追加 #tagがうまくいかない params.require(:post).permit(:user_id,:name, :title, :content, :picture, :tag_ids) end def set_target_post @post = Post.find(params[:id]) end end
views/posts/_form.html.erb
<!-- 追加 --> <%= render 'shared/error_messages' %> <%= form_for post do |f| %> <div class="form-group"> <%= f.label :title, '投稿タイトル' %> <%= f.text_field :title, class: 'form-control' %> <small id="title-tip" class="form-text text-muted"> タイトルを入力してください。 </small> </div> <div class="form-group"> <%= f.label :content, '投稿内容' %> <%= f.text_area :content, class: 'form-control', rows:10 %> <small id="content-tip" class="form-text text-muted"> 投稿内容を入力してください。 </small> </div> <div class="form-group"> <%= f.label :content, '参考にしたレシピ' %> <%= f.text_area :content, class: 'form-control' %> <small id="content-tip" class="form-text text-muted"> 参考にしたレシピのサイトURLを入力してください。 </small> </div> <div class="form-group"> <span>タグ</span> <%= f.collection_check_boxes(:tag_ids, Tag.all, :id, :name) do |tag| %> <div class="form-check"> <%= tag.label class: 'form-check-label' do %> <%= tag.check_box class: 'form-check-input' %> <%= tag.text %> <% end %> </div> <% end %> </div> <div class="field"> <%= f.label :つくったごはんの写真 %> <%= f.file_field :picture, id: :post_picture %> </div> <br></br> <%= f.submit '投稿', class: 'btn btn-info btn-block' %> <small id="submit-tip" class="form-text text-muted"> 投稿する前に投稿内容を見直してください! </small> <%= f.hidden_field :user_id, value: current_user.id %> <% end %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/05 03:27
2018/11/05 03:58
2018/11/05 04:07