🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails

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

Q&A

解決済

3回答

2037閲覧

createアクションで保存されない

hanihani2000070

総合スコア0

Ruby on Rails

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

0グッド

0クリップ

投稿2020/12/14 04:21

編集2020/12/14 04:35

前提・実現したいこと

ruby on rails で初歩てきなの書籍アウトプットアプリを作成中です。
outputモデルと、userモデルと、libraryモデルを紐づけて投稿機能を実装しています。

### 解決したいこと
create アクションを起動させた時にDBに保存される
情報を入力して投稿ボタンを押すと次のページに飛ぶようにする
(現状→if文の定義によりelseの方に行ってしまう。)

該当のソースコード

app/controllers/libraries_controller.rb def new @library = Library.new end def create @library= Library.new(library_params) if @library.save redirect_to root_path else render :new end end private def library_params params.require(:library).permit(:title, :impressions, :category_id, :lank_id, :author, :syuppan, :read_id) end end
config/routes,rb Rails.application.routes.draw do devise_for :users root to: "outputs#index" resources :users, only: [:edit, :update] resources :libraries, only: [:new, :create] do resources :outputs, only: [:index, :create] end end
app/model/library,rb class Library < ApplicationRecord belongs_to :user has_many :outputs validates :title, :impressions, :category_id, :lank_id, :author, :syuppan, :read_id, presence: true end
db/migrate class CreateLibraries < ActiveRecord::Migration[6.0] def change create_table :libraries do |t| t.string :title, null: false t.text :impressions, null: false t.integer :category_id, null: false t.text :lank_id, null: false t.string :author, null: false t.integer :syuppan, null: false t.string :read_id, null: false t.string :outputs, null: false t.references :user, foreign_key: true t.timestamps end end end
app/views/libraries/new.html.erb <div class='chat-library-form'> <h1>書籍登録フォーム</h1> <%=form_with model: @library, local: true do |f|%> <div class='chat-library-form__field'> <div class='chat-library-form__field--left'> <%= f.label :著書名, class: 'chat-library-form__label'%> </div> <div class='chat-library-form__field--right'> <%= f.text_field :title, class: 'chat__library_name chat-library-form__input', placeholder: '著書名を入力してください'%> </div> </div> <div class='chat-library-form__field'> <div class='chat-library-form__field--left'> <%= f.label :アウトプット, class: 'chat-library-form__label'%> </div> <div class='chat-library-form__field--right'> <%= f.text_field :impressions, class: 'chat__library_name chat-library-form__input', placeholder: 'アウトプットを入力してください'%> </div> </div> <div class='chat-library-form__field'> <div class='chat-library-form__field--left'> <%= f.label :カテゴリー, class: 'chat-library-form__label'%> </div> <div class='chat-library-form__field--right'> <%= f.text_field :category_id, class: 'chat__library_name chat-library-form__input', placeholder: 'アウトプットを入力してください'%> </div> </div> <div class='chat-library-form__field'> <div class='chat-library-form__field--left'> <%= f.label :ランク, class: 'chat-library-form__label'%> </div> <div class='chat-library-form__field--right'> <%= f.text_field :lank_id, class: 'chat__library_name chat-library-form__input', placeholder: 'アウトプットを入力してください'%> </div> </div> <div class='chat-library-form__field'> <div class='chat-library-form__field--left'> <%= f.label :著者, class: 'chat-library-form__label'%> </div> <div class='chat-library-form__field--right'> <%= f.text_field :author, class: 'chat__library_name chat-library-form__input', placeholder: 'アウトプットを入力してください'%> </div> </div> <div class='chat-library-form__field'> <div class='chat-library-form__field--left'> <%= f.label :出版社, class: 'chat-library-form__label'%> </div> <div class='chat-library-form__field--right'> <%= f.text_field :syuppan, class: 'chat__library_name chat-library-form__input', placeholder: 'アウトプットを入力してください'%> </div> </div> <div class='chat-library-form__field'> <div class='chat-library-form__field--left'> <%= f.label :読んだ場所, class: 'chat-library-form__label'%> </div> <div class='chat-library-form__field--right'> <%= f.text_field :read_id, class: 'chat__library_name chat-library-form__input', placeholder: 'アウトプットを入力してください'%> </div> </div> <div class='chat-library-form__field'> <div class='chat-library-form__field--left'></div> <div class='chat-library-form__field--right'> <%= f.submit class: 'chat-library-form__action-btn'%> </div> </div> <% end %> </div>

登録ボタンを押した後のコンソール

(2.5ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483 (0.4ms) SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC Processing by LibrariesController#create as HTML Parameters: {"authenticity_token"=>"kGujcXLmPiMvI28HP/bTLbOOLabiRkLkpiqElu726SQ1HT+U/KzJLQ3OScCgYq+rK+naGQTUF28LMDVaJn2sEg==", "library"=>{"title"=>"aaa", "impressions"=>"aaa", "category_id"=>"aaa", "lank_id"=>"aaa", "author"=>"aaa", "syuppan"=>"aaa", "read_id"=>"aaa"}, "commit"=>"Create Library"} User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 Rendering libraries/new.html.erb within layouts/application Rendered libraries/new.html.erb within layouts/application (Duration: 15.5ms | Allocations: 3394) [Webpacker] Everything's up-to-date. Nothing to do Completed 200 OK in 1180ms (Views: 1087.9ms | ActiveRecord: 10.1ms | Allocations: 1561154)

試したこと

他のコードを元に行っている為、クラス名等は少し異なります。
また、category_id 、lank_id、read_idは今後integer型を使い実装していきます。

def create binding.pry→①gem導入済み @library= Library.new(library_params) if @library.save redirect_to root_path else render :new end end → params => <ActionController::Parameters {"authenticity_token"=>"qug7w4lniKwERgrbq0Fw2+r/qtn5L0p0E1yepByr69sPnqcmBy1/oiarLBw01QxdcphdZh+9H/++Ri9o1CCu7Q==", "library"=>{"title"=>"aaa", "impressions"=>"aaa", "category_id"=>"aaa", "lank_id"=>"aaa", "author"=>"aaa", "syuppan"=>"aaa", "read_id"=>"aaa"}, "commit"=>"Create Library", "controller"=>"libraries", "action"=>"create"} permitted: false> → library_params => <ActionController::Parameters {"title"=>"aaa", "impressions"=>"aaa", "category_id"=>"aaa", "lank_id"=>"aaa", "author"=>"aaa", "syuppan"=>"aaa", "read_id"=>"aaa"} permitted: true>

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

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

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

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

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

m.ts10806

2020/12/14 04:27

コンソールにエラー等出てませんか?
hanihani2000070

2020/12/14 04:37

エラーは出ていません。 該当のソースコードにコンソールの表示を追加しました。 ご確認していただけると幸いです。
guest

回答3

0

user_id が指定されていないため保存されないように見えます。
rails5 くらいから belongs_to は デフォルトで required: true です。

保存されない理由を確認するには、savesave!にしてエラーを出すか、
pry で savevalid?のあとにerrorsを確認すると良いです。

@library.valid? # => false @library.errors

投稿2020/12/14 05:18

編集2020/12/14 05:23
neko_daisuki

総合スコア2090

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

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

0

解決できました。
ログインしているユーザーが定義されていませんでした。
その為、 @library.user_id = current_user.id
を追加しました。

投稿2020/12/16 09:02

hanihani2000070

総合スコア0

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

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

0

自己解決

解決できました。
ログインしているユーザーが定義されていませんでした。
その為、 @library.user_id = current_user.id
を追加しました。

投稿2020/12/16 08:57

hanihani2000070

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問