質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

692閲覧

contentやtitleに入力をしているのに未入力のエラーメッセージが出る

ayachika

総合スコア36

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/11/05 02:43

現在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 %>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

createのところでも、post_paramsを使うようにしてはどうでしょうか。

post_paramsを見る限り、contentparams[:post][:content]に来ているようです。

投稿2018/11/05 02:49

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ayachika

2018/11/05 03:27

ご教示ありがとうございます。いまだ初心者でその構造について理解しきれておりませんが、以下のように修正しました。が以下のようなエラーが出てしまいました… def create @Post = Post.new( content: params[:content], user_id: @current_user.id ) エラー↓ saveメソッドがないとのことなのですが、今まで投稿できていたためなぜこのようなエラーが出るか不明です… コードの修正の仕方が間違っていたらご指導いただければ幸いです。 NoMethodError in PostsController#create undefined method `save' for nil:NilClass Extracted source (around line #26) # 保存の正否をチェック if @post.save # フラッシュ flash[:notice] = "「#{post.title}」の記事が投稿されました!" redirect_to post
maisumakun

2018/11/05 03:58

NoMethodErrorは、@Postと@postの大文字小文字の違いによるものです。 …というより、自分の回答に沿った修正に全く見えないのですが。
ayachika

2018/11/05 04:07

ご回答ありがとうございます。私の勉強不足で正直全く理解できていないです。もう一度やり直してみます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問