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

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

新規登録して質問してみよう
ただいま回答率
85.35%
WSL(Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux) は、Windows10のOS上でLinux向けのバイナリプログラムを実行可能にする機能です。また、WindowsOSのAPIを用いた仕組みを提供しており、Linux側からWindowsOSへのファイルアクセスもできます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

Q&A

解決済

1回答

889閲覧

rails 6.0でform_withで投稿の保存ができません.

sasaharukimedes

総合スコア27

WSL(Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux) は、Windows10のOS上でLinux向けのバイナリプログラムを実行可能にする機能です。また、WindowsOSのAPIを用いた仕組みを提供しており、Linux側からWindowsOSへのファイルアクセスもできます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/30 08:56

編集2020/06/30 12:02

投稿の保存が行われ, 違うページに移動した先でその内容が確認できるようにしたいです.

Rails6.0にて, Webアプリの開発を勉強しながら行っています. Rails6.0では, form_tagの記述が非推奨とのことをあとから知り, 色々と変更を加えながらレイアウトやルーティング等をいじっていたところ,正しく保存されページ遷移しなくなってしまいました.

発生している問題・エラーメッセージ

エラーというわけではないのですが, 恐らくvalidationに引っかかってないはずなのに, エラーが出てしまい, 再度入力画面になってしまいます.

###期待している処理
期待: ページ入力→バリデーション通過→db保存→ページ移動
現在: ページ入力→バリデーション引っかかる?→db保存できない→もとの入力ページに戻る

該当のソースコード

new.html.erb

<div class="main posts-new"> <div class="container"> <h1 class="form-heading">手紙を書く</h1> <%= form_with scope: :post, url: posts_path, local: true do |form| %> <% if @post.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2> <ul> <% @post.errors.full_messages.each do |msg|%> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <div class="form"> <div class="form-body"> <%= form.label :Dear %><br> <%= form.text_field :dear %> <%= form.label :content %><br> <%= form.text_area :content %> <%= form.label :From %><br> <%= form.text_field :from %> <%= form.submit value="投函する" %> </div> </div> <% end %> </div> </div>

post.rb

class Post < ApplicationRecord validates :dear, presence: true, length: {maximum:20} validates :content, presence: true, length: {maximum:200} validates :from, presence: true, length:{maximum:20} end

posts_controller.rb

class PostsController < ApplicationController def index @posts = Post.all.order(created_at: :desc) end def show @post = Post.find(params[:id]) end def new @post = Post.new end def create @post = Post.new(post_params) if @post.save redirect_to "/posts" else render "new" end end private def post_params params.require(:post).permit(:title, :content, :title) #asmさんを反映済み end end

routes.rb

Rails.application.routes.draw do root 'static_pages#home' resources :posts get '/', to: 'static_pages#home' get 'about', to: 'static_pages#about' end

migrate_file

class CreatePosts < ActiveRecord::Migration[6.0] def change create_table :posts do |t| t.string :dear t.text :content t.string :from t.timestamps end end end

試したこと

controllerの確認等を自分なりにしたのですが,いまいちわからず, 皆さんの力を借りたいと思い投稿させていただきました.
個人的には, form_tagからform_withに書き換えを試みた過程でなにか記述ミスをしたか, モデルを作る際に何らかのミスをしていたりするのかなと思います.

補足情報(FW/ツールのバージョンなど)

Rails Guideやチュートリアル, チェリー本を参考にしています.
Ruby 2.6.5, Rails 6.0.

追加情報

頂いた@asmさんの回答通りの記述を加えた結果, 以下のようになりました.

2 errors prohibited this post from being saved:
Dear can't be blank
From can't be blank

もともと, この2が3だったのでcontentのみvalidatesを通過したようです. validatesの書き方に問題があるのか, モデル作成時にミスをしているのか...


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

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

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

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

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

guest

回答1

0

ベストアンサー

params.permit(:title, :content, :title)

scope: :postなのでparams.require(:post).permit(:dear, :content, :from)とする必要があります。

投稿2020/06/30 09:30

編集2020/06/30 12:05
asm

総合スコア15149

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

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

sasaharukimedes

2020/06/30 11:55

@asmさん 前回に続き, 回答ありがとうございます. 追加分に内容を書いておきますが, 記述どおりに書き直しましたが, すんなり通りません. validatesが悪かったりするのでしょうか?
asm

2020/06/30 12:06

直しました。
sasaharukimedes

2020/06/30 12:24

@asmさん やりたかったことができました. 命名を少し後悔しつつありますが助かりました. 前回に続き, ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問