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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

1回答

2305閲覧

[ rails ]user_idが保存できません

yuki1221

総合スコア6

Ruby on Rails 5

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

1クリップ

投稿2019/10/02 08:10

###概要

閲覧ありがとうございます。
以下3つのモデルを使った投稿アプリを作っています。

post.rb *belongs_to :user
user.rb *has_many :posts
like.rb *今回は関係ない(はず..)

index.htmlから新規投稿ボタンでnew.htmlに遷移
imageとtextを入力して投稿したらindex.htmlにリダイレクトする作りです。

imageとtextはDBに保存されるのですが、user_idが保存されなくて困っています。( nullにはならなくて空欄になります。 )

###コード

posts_controler

before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy] def new @post = Post.new end def create Post.create(create_params) redirect_to :root end **他省略** private def create_params params.require(:post).permit(:image,:text).merge user_id:current_user.id end

new.html.erb

<div class="container"> <div class="new_post"> <%= form_for (@post) do |f| %> <%= f.label :画像 %><br /> <%= f.file_field :image %> <%= f.text_area :text %> <%= f.submit "投稿する", :class=>"btn" %> <% end %> </div> </div>

routes.rb

Rails.application.routes.draw do devise_for :users resources :users, only: [:index, :show] resources :posts do resources :likes, only: [:create, :destroy] end root 'posts#index' end

###試したこと

  • 同じ仕様の投稿のみのアプリを作ってみたところ、そちらは問題なく保存できました。

色々と機能を追加していく中で不具合が出ている可能性があるのですが、すべてのコードを貼り付けると質問の意図が伝わりずらいと思い、必要そうな箇所をのっけています。他に必要の情報などありましたらお教えください。

  • createメソッドの直後にbinding.pryを入れて、下記二つのparameterは取得できました。

paramsの結果↓
<ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"Nr0Jpsp6BVT3wxLnsgPVOBh36QTq4k+km5NoQvmo9nUq7vffIs5LRlwQ0VA2Ki0LjqpzWcZ40oD8k2DbZazJ5g==", "post"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x00007f68d811bd98 @tempfile=#Tempfile:/tmp/RackMultipart20191002-22770-1jfywsr.jpg, @original_filename="cake-802188_960_720.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name="post[image]"; filename="cake-802188_960_720.jpg"\r\nContent-Type: image/jpeg\r\n">, "text"=>"テキスト"}, "commit"=>"投稿する", "controller"=>"posts", "action"=>"create"} permitted: false

current_userの結果↓
<User id: 1, email: "test@gmail.com", nickname: "yuki", created_at: "2019-09-03 07:51:31", updated_at: "2019-09-16 07:40:44">

###その他環境など

  • AWS cloud9
  • macbook air
  • devise
  • active storageで投稿機能(amazon s3)
  • likeモデルでいいね機能(ajax)
  • git
  • heroku

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

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

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

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

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

guest

回答1

0

user_idが空欄になってしまう原因はちょっとよくわかりませんが、

rb

1def create 2 Post.create(create_params) 3 redirect_to :root 4end 5 6private 7 8 def create_params 9 params.require(:post).permit(:image, :text).merge user_id: current_user.id 10 end

ではなく

rb

1def create 2 current_user.posts.create(create_params) 3 redirect_to :root 4end 5 6private 7 8 def create_params 9 params.require(:post).permit(:image, :text) 10 end

とするほうがRailsっぽいです。

投稿2019/10/02 08:48

Mugheart

総合スコア2349

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

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

yuki1221

2019/10/03 02:27

回答ありがとうございます。 なるほど、確かにこちらの方がスッキリしますね。 postモデルを作った際にreferenceでuserを作ったので、それも関係してるかも…?と思ってSQL側も含めて現在原因究明中です…
yuki1221

2019/10/03 04:35

P.S. 下記手順で外部キー制約を外してuser_idを作り直したら解決できました。 ( あまり良くない解決方かもしれませんが ) 迅速な回答ありがとうございました! rails g migration remove_user_id_from_posts user_id:reference rails db:migrate ↓ rails g migration add_user_id_to_posts rails db:migrate
Mugheart

2019/10/03 04:42

> postモデルを作った際にreferenceでuserを作った rails g model post user:references で作ったということですよね?であれば問題ないはずなんですけどね...。 references を reference で単数形にしていた...とか? うーん、あまりDB周りは自信がないです。 何はともあれ解決したのであればよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問