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

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

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

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

Ruby on Rails 6

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

MySQL

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

Q&A

1回答

1059閲覧

Mysqlデータベースに保存ができない?

rrtts667

総合スコア18

Ruby

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

Ruby on Rails 6

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

MySQL

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

0グッド

0クリップ

投稿2020/08/09 06:25

編集2020/08/10 10:46

現在railsで料理投稿を行いユーザーが投稿を行なった料理をカレンダーに投稿すると言うアプリを制作しています。
そこでユーザーが料理投稿するまでは上手くできましたが料理の内容をカレンダーに投稿すると言う所で息詰まっています。

解決したいこと

カレンダーに投稿するとカレンダーの内容とユーザーIDは保存できましたが料理IDがデータベース上に保存ができていないので保存できるようにしたい。

カレンダーに投稿画面の作成はできましたが
イメージ説明
それをカレンダーに投稿するとカレンダーの内容ユーザーIDは保存できましたが料理投稿のデータがデータベース上に保存ができていません。
イメージ説明
バリエーションのかけ方がおかしいのでしょうか?
ご教授いただけると幸いです。

カレンダーデータベース

ruby

1class CreateBlogs < ActiveRecord::Migration[6.0] 2 def change 3 create_table :blogs do |t| 4 t.string :title 5 t.text :content 6 t.datetime :start_time 7 t.references :user, foreign_key: true 8 t.references :tweet, foreign_key: true 9 10 t.timestamps 11 end 12 end 13end 14

カレンダー.rb

ruby

1class Blog < ApplicationRecord 2 belongs_to :user 3 has_many :tweets 4end 5

料理投稿.rb

ruby

1class Tweet < ApplicationRecord 2 validates :text, presence: true 3 belongs_to :user 4 has_many :comments 5 has_many :blogs 6 7 mount_uploader :image, ImageUploader 8 def self.search(search) 9 return Tweet.all unless search 10 Tweet.where('title LIKE(?)', "%#{search}%") 11 end 12end

カレンダーコントローラー

ruby

1class BlogsController < ApplicationController 2 3 def index 4 @blogs = Blog.all 5 @tweets = Tweet.all 6 end 7 def new 8 @blog = Blog.new 9 @tweet = Tweet.find(params[:id]) 10 end 11 12 def show 13 @blog = Blog.find(params[:id]) 14 end 15 16 def create 17 @blog = current_user.blogs.new(blog_parameter) 18 @blog.save 19 redirect_to blogs_path 20 end 21 22 def destroy 23 @blog = Blog.find(params[:id]) 24 @blog.destroy 25 redirect_to blogs_path, notice:"削除しました" 26 end 27 28 def edit 29 @blog = Blog.find(params[:id]) 30 end 31 32 def update 33 @blog = Blog.find(params[:id]) 34 if @blog.update(blog_parameter) 35 redirect_to blogs_path, notice: "編集しました" 36 else 37 render 'edit' 38 end 39 end 40 41 private 42 43 def blog_parameter 44 params.require(:blog).permit(:title, :content, :start_time) 45 end 46 47end

コンソール画像
イメージ説明

追記
カレンダーコントローラー変更点

rails

1 def create 2 @blog = current_user.blogs.new(blog_parameter) 3 @tweet = Tweet.new(user_id: current_user.id, image: params[:image]) 4 # params[:image]はフォームから飛んでくる画像のパラメータにする 5 @blog.save 6 @tweet.save 7 redirect_to blogs_path 8 end

カレンダー投稿画面 view

haml

1.blog-new 2 .blog-create 3 .carendar カレンダー投稿画面 4 = form_with(model: @blog, local: true) do |form| 5 .blog 6 .blog-new-create 7 .title 8 = form.label :タイトル 9 %br/ 10 = form.text_field :title 11 .time 12 = form.label :日付_時間 13 %br/ 14 = form.datetime_select :start_time 15 .content 16 = form.label :content 17 %br/ 18 = form.text_field :content 19 .blog-tweet 20 .blog-tweet-image 21 = image_tag @tweet.image.url 22 %br/ 23 .blog-tweet-title 24 = @tweet.title 25 %br/ 26 .blog-tweet-title 27 = @tweet.text 28 .submit 29 = form.submit 30 .link-return 31 = link_to 'トップページに戻る', tweets_path 32

tweetデータベース

rails

1class CreateTweets < ActiveRecord::Migration[6.0] 2 def change 3 create_table :tweets do |t| 4 t.string :title 5 t.string :text 6 t.string :image 7 8 t.timestamps 9 end 10 end 11end 12

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

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

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

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

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

guest

回答1

0

def create @tweet = Tweet.new(tweet_params) @tweet.save @blog = current_user.blogs.build(blog_parameter) @blog.tweet_id = tweet.id # tweetを何らかの方法でblogの登録フォームで送ってください @blog.save redirect_to blogs_path end private : def blog_parameter params.require(:blog).permit(:title, :content, :start_time) end

blogの作成時にはtweetが存在する
そのidをtweet_idに代入して保存する

投稿2020/08/10 08:35

編集2020/08/12 10:17
nasuk47

総合スコア311

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

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

rrtts667

2020/08/10 08:49

コンソール画像を追加しています。 コントローラ一部変更していますので追記しています。 よろしくお願い致します。
nasuk47

2020/08/10 08:54

送られているパラメータにtweet_idが存在しませんがtweetの内容はカレンダー投稿画面のどの部分に当たりますか?
rrtts667

2020/08/10 10:28

パラメータにtwwe_idが存在しませんとございますがコントローラを編集すればよろしいでしょうか? それともviewでしょうか?
nasuk47

2020/08/10 10:42

Tweetモデルのデータベース情報はどのようになっていますか? BrogとTweetは同じように思うのですがどのように異なるのでしょうか?
rrtts667

2020/08/10 10:47

tweetのデータベースを追記しました。 よろしくお願い致します。
nasuk47

2020/08/10 11:14 編集

なるほど ``` def create @blog = current_user.blogs.new(blog_parameter) @tweet = Tweet.new(user_id: current_user.id, image: params[:image]) # params[:image]はフォームから飛んでくる画像のパラメータにする @tweet.save @blog.tweet_id = @tweet.id @blog.save redirect_to blogs_path end ``` のようにするとsaveしたtweetのidが@blogのtweet_idに入ると思います。
nasuk47

2020/08/10 21:13

両方ともsave!としてみてください。 おそらくなぜエラーが発生しているか表示されると思います。
rrtts667

2020/08/11 10:56

後tweetのtitle,contentとblogのtitle,contentは同じものが入るのでしょうか? に関してですがtweetとblogのtitle,contentについては別々の物が入ります。 対応して頂きありがとうございます。
nasuk47

2020/08/11 12:29

別々のものが入るのですね。勘違いしていました。 ではblogのcreateアクション時にはtweetは存在していると思うのでそのtweetを取得してidで保存してあげればいけそうです。
rrtts667

2020/08/12 04:33

なるほどですね こちらを実行する前に別のエラー Unpermitted parameter: :image_cacheと出てしまったので そちらを直さないとこちらの作業に入れないので エラー解除次第参考を元に試して見ます。 記載して頂いたコードは全てblog_controllerで記載でよろしいでしょうか?
nasuk47

2020/08/12 10:15

少しコードを修正しておきます。 blogs_controllerのcreateアクション時にtweetが取得できている状態にすれば保存できると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問