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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

2回答

7281閲覧

new/createでsaveされない

innjera

総合スコア132

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/05/05 01:24

'Rails:5.0.0.1' にて開発しています。
新しいLessonを新規作成したいのですが、saveされません。原因があるとすると、以下のいくつかにある気がしますが、こういった場合に、やるべき確認事項は何になるのでしょうか? binding.pryも利用しています。

  • リストstrong Parameterに問題があるとも思いましたが、そうではないように見えます。
  • lesson has_many :lesson_images, accepts_nested_attributes_for :lesson_images, allow_destroy: trueを利用して、lessonmodelがlesson_imagesを複数同時に新規作成するようにしています。
  • lesson_imagesのアップロードにはcarrierwaveを利用し、保存先は外部の cloudinaryというクラウドサーバーに設定しています。(同じプロジェクト内の別の画像はしっかり新規作成、保存できており、且つ本LessonLessonImageseedデータはしっかり保存されているのでここの設定に問題があるようには思えません)

ruby

1#binding.pryの結果 2 43: def create 3 44: @lesson = Lesson.new(lesson_params) 4 45: @lesson.adviser = current_user.adviser 5 46: if @lesson.save 6 47: redirect_to [current_user, :user_lessons] 7 48: else 8 => 49: binding.pry 9 50: flash.now.alert = '入力に誤りがあります。入力必須項目を確認して下さい。' 10 51: render "new" 11 52: end 12 53: end 13 14[1] pry(#<User::LessonsController>)> @lesson 15=> #<Lesson:0x007fa4413f1780 16 id: nil, 17 adviser_id: 1, 18 price: 1000, 19 required_time: 30, 20 title: "test", 21 makeupkit: "自分の道具を持参", 22 makeupkit_explain: "test\r\n", 23 memo: "test", 24 place: " その他(コメント欄に記入)", 25 place_memo: "test", 26 created_at: nil, 27 updated_at: nil> 28 29[2] pry(#<User::LessonsController>)> @lesson.lesson_images.nil? 30=> false 31[3] pry(#<User::LessonsController>)> @lesson.lesson_images.empty? 32=> false 33[4] pry(#<User::LessonsController>)>

ruby

1#Lesson Model & Tabel 2# id :integer not null, primary key 3# adviser_id :integer not null 4# price :integer not null 5# required_time :integer 6# title :string 7# makeupkit :string 8# makeupkit_explain :string 9# memo :text 10# place :string 11# place_memo :text 12# created_at :datetime not null 13# updated_at :datetime not null 14# 15 16class Lesson < ApplicationRecord 17 belongs_to :adviser 18 19 has_many :lesson_images, dependent: :destroy 20 accepts_nested_attributes_for :lesson_images, allow_destroy: true 21 22 has_and_belongs_to_many :situations 23 has_and_belongs_to_many :parts 24 25 acts_as_taggable # Alias for acts_as_taggable_on :tags 26 acts_as_taggable_on :genres 27 28 validates :price, :required_time, :title, :makeupkit, :place, :memo, presence: true 29 30 PRICE_LIST = [ 31 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000, 32 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000, 14000, 33 15000, 16000, 17000, 18000, 19000, 20000, 34 21000, 22000, 23000, 24000, 25000, 26000, 27000, 28000, 29000, 30000 35 ] 36 37 REQUIRED_TIME = { 38 "30分" => 30, "1時間" => 60, "1.5時間" => 90, "2時間" => 120, 39 "3時間" => 180, "4時間" => 240 40 } 41 42 PREFECTURE_NAMES = %w( 43 その他(コメント欄に記入) 44 北海道 45 青森県 岩手県 宮城県 秋田県 山形県 福島県 46 茨城県 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県 47 新潟県 富山県 石川県 福井県 山梨県 長野県 岐阜県 静岡県 愛知県 48 三重県 滋賀県 京都府 大阪府 兵庫県 奈良県 和歌山県 49 鳥取県 島根県 岡山県 広島県 山口県 50 徳島県 香川県 愛媛県 高知県 51 福岡県 佐賀県 長崎県 熊本県 大分県 宮崎県 鹿児島県 52 沖縄県 53 ) 54 55 PREFECTURE_NAMES_SEARCH = [ 56 "", 57 "北海道", 58 "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", 59 "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", 60 "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", 61 "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", 62 "鳥取県", "島根県", "岡山県", "広島県", "山口県", 63 "徳島県", "香川県", "愛媛県", "高知県", 64 "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", 65 "沖縄県", 66 "その他" 67 ] 68end 69 70#LessonImage Model & Table 71# == Schema Information 72# 73# Table name: lesson_images 74# 75# id :integer not null, primary key 76# lesson_id :integer 77# lesson_image :string 78# created_at :datetime not null 79# updated_at :datetime not null 80# 81 82class LessonImage < ApplicationRecord 83 belongs_to :lesson, optional: true 84 mount_uploader :lesson_image, LessonImageUploader 85end 86

ruby

1#Lesson Controler 2class User::LessonsController < User::Base 3 before_action :authenticate_user!, except:[:index, :show, :search] 4 before_action :set_lesson_tags_to_gon, only: [:edit] 5 before_action :search_preparation, except:[:index] 6 7 def new 8 @lesson = Lesson.new 9 3.times{@lesson.lesson_images.build} 10 end 11 12 def edit 13 @lesson = current_user.adviser.lessons.find(params[:id]) 14 t = 3 - @lesson.lesson_images.size.to_i 15 t.times{@lesson.lesson_images.build} 16 end 17 18 def create 19 @lesson = Lesson.new(lesson_params) 20 @lesson.adviser = current_user.adviser 21 if @lesson.save 22 redirect_to [current_user, :user_lessons] 23 else 24 binding.pry 25 flash.now.alert = '入力に誤りがあります。入力必須項目を確認して下さい。' 26 render "new" 27 end 28 end 29 30 def update 31 @lesson = current_user.adviser.lessons.find(params[:id]) 32 @lesson.assign_attributes(lesson_params) 33 if @lesson.save 34 redirect_to [current_user, :user_lesson] 35 else 36 binding.pry 37 flash.now.alert = '入力に誤りがあります。入力必須項目を確認して下さい。' 38 render "edit" 39 end 40 end 41 42 private def lesson_params 43 attrs = [ 44 :price, :required_time, :title, :makeupkit, :makeupkit_explain, 45 :memo, :place, :place_memo, 46 :tag_list, :genre_list, 47 situation_ids:[], part_ids:[], 48 lesson_images_attributes:[:id, :lesson_id, :lesson_image, :lesson_image_cache, :remove_lesson_image] 49 ] 50 params.require(:lesson).permit(attrs) 51 end 52 53 #private def search_params 54 # %i 要素がシンボルの配列を作る。 55 # search_conditions = %i( 56 # price_gteq price_lteq place_cont memo_cont title_cont memo_and_title_cont 57 # ) 58 # params.require(:q).permit(search_conditions) 59 #end 60 61 private def set_lesson_tags_to_gon 62 @lesson = current_user.adviser.lessons.find(params[:id]) 63 gon.genre_tags = @lesson.genre_list 64 end 65end

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

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

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

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

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

guest

回答2

0

Rails のログを見ないと何とも言えませんが、rails db:migrate は実行済みでしょうか。DB に手で INSERT すると入りますか。rails dbconsole で同様に lesson.save もできるかどうか見てみるといいかもしれません。

投稿2017/05/05 01:43

SugiTK

総合スコア495

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

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

innjera

2017/05/05 03:32

ありがとうございます!試して見たもののうまく行かなかったのですが、結局、binding.pryにて止まったところでlesson.errors.full_messagesでエラーを確認したところ、全く予期していなかった別のmodelとの関連付けに問題があった(ここの理由はわからないのですが、取り敢えず消しました)ようで、解決しました。
guest

0

自己解決

binding.pryにて止まったところでlesson.errors.full_messagesでエラーを確認したところ、全く予期していなかった別のmodelとの関連付けに問題があった(ここの理由はわからないのですが、取り敢えず消しました)ようで、解決しました。

投稿2017/05/05 03:33

innjera

総合スコア132

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問