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

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

ただいまの
回答率

90.45%

  • Ruby on Rails

    9091questions

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

  • Ruby on Rails 4

    2551questions

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

new/createでsaveされない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,400

innjera

score 117

'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データはしっかり保存されているのでここの設定に問題があるようには思えません)
#binding.pryの結果
 43: def create
    44:   @lesson = Lesson.new(lesson_params)
    45:   @lesson.adviser = current_user.adviser
    46:   if @lesson.save
    47:     redirect_to [current_user, :user_lessons]
    48:   else
 => 49:     binding.pry
    50:     flash.now.alert = '入力に誤りがあります。入力必須項目を確認して下さい。'
    51:     render "new"
    52:   end
    53: end

[1] pry(#<User::LessonsController>)> @lesson
=> #<Lesson:0x007fa4413f1780
 id: nil,
 adviser_id: 1,
 price: 1000,
 required_time: 30,
 title: "test",
 makeupkit: "自分の道具を持参",
 makeupkit_explain: "test\r\n",
 memo: "test",
 place: " その他(コメント欄に記入)",
 place_memo: "test",
 created_at: nil,
 updated_at: nil>

[2] pry(#<User::LessonsController>)> @lesson.lesson_images.nil?
=> false
[3] pry(#<User::LessonsController>)> @lesson.lesson_images.empty?
=> false
[4] pry(#<User::LessonsController>)>
#Lesson Model & Tabel
#  id                :integer          not null, primary key
#  adviser_id        :integer          not null
#  price             :integer          not null
#  required_time     :integer
#  title             :string
#  makeupkit         :string
#  makeupkit_explain :string
#  memo              :text
#  place             :string
#  place_memo        :text
#  created_at        :datetime         not null
#  updated_at        :datetime         not null
#

class Lesson < ApplicationRecord
  belongs_to :adviser

  has_many :lesson_images, dependent: :destroy
  accepts_nested_attributes_for :lesson_images, allow_destroy: true

  has_and_belongs_to_many :situations
  has_and_belongs_to_many :parts

  acts_as_taggable # Alias for acts_as_taggable_on :tags
  acts_as_taggable_on :genres

  validates :price, :required_time, :title, :makeupkit, :place, :memo, presence: true

  PRICE_LIST = [
    1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000,
    6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000, 14000,
    15000, 16000, 17000, 18000, 19000, 20000,
    21000, 22000, 23000, 24000, 25000, 26000, 27000, 28000, 29000, 30000
  ]

  REQUIRED_TIME = {
    "30分" => 30, "1時間" => 60, "1.5時間" => 90, "2時間" => 120,
    "3時間" => 180, "4時間" => 240
  }

  PREFECTURE_NAMES = %w(
   その他(コメント欄に記入)
    北海道
    青森県 岩手県 宮城県 秋田県 山形県 福島県
    茨城県 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県
    新潟県 富山県 石川県 福井県 山梨県 長野県 岐阜県 静岡県 愛知県
    三重県 滋賀県 京都府 大阪府 兵庫県 奈良県 和歌山県
    鳥取県 島根県 岡山県 広島県 山口県
    徳島県 香川県 愛媛県 高知県
    福岡県 佐賀県 長崎県 熊本県 大分県 宮崎県 鹿児島県
    沖縄県
  )

  PREFECTURE_NAMES_SEARCH = [
    "",
    "北海道",
    "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県",
    "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県",
    "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県",
    "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県",
    "鳥取県", "島根県", "岡山県", "広島県", "山口県",
    "徳島県", "香川県", "愛媛県", "高知県",
    "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県",
    "沖縄県",
    "その他"
  ]
end

#LessonImage Model & Table
# == Schema Information
#
# Table name: lesson_images
#
#  id           :integer          not null, primary key
#  lesson_id    :integer
#  lesson_image :string
#  created_at   :datetime         not null
#  updated_at   :datetime         not null
#

class LessonImage < ApplicationRecord
  belongs_to :lesson, optional: true
  mount_uploader :lesson_image, LessonImageUploader
end
#Lesson Controler
class User::LessonsController < User::Base
  before_action :authenticate_user!, except:[:index, :show, :search]
  before_action :set_lesson_tags_to_gon, only: [:edit]
  before_action :search_preparation, except:[:index]

  def new
    @lesson = Lesson.new
    3.times{@lesson.lesson_images.build}
  end

  def edit
    @lesson = current_user.adviser.lessons.find(params[:id])
    t = 3 - @lesson.lesson_images.size.to_i
    t.times{@lesson.lesson_images.build}
  end

  def create
    @lesson = Lesson.new(lesson_params)
    @lesson.adviser = current_user.adviser
    if @lesson.save
      redirect_to [current_user, :user_lessons]
    else
      binding.pry
      flash.now.alert = '入力に誤りがあります。入力必須項目を確認して下さい。'
      render "new"
    end
  end

  def update
    @lesson = current_user.adviser.lessons.find(params[:id])
    @lesson.assign_attributes(lesson_params)
    if @lesson.save
      redirect_to [current_user, :user_lesson]
    else
      binding.pry
      flash.now.alert = '入力に誤りがあります。入力必須項目を確認して下さい。'
      render "edit"
    end
  end

  private def lesson_params
    attrs = [
      :price, :required_time, :title, :makeupkit, :makeupkit_explain,
      :memo, :place, :place_memo,
      :tag_list, :genre_list,
      situation_ids:[], part_ids:[],
      lesson_images_attributes:[:id, :lesson_id, :lesson_image, :lesson_image_cache, :remove_lesson_image]
    ]
    params.require(:lesson).permit(attrs)
  end

  #private def search_params
    # %i 要素がシンボルの配列を作る。
  #  search_conditions = %i(
  #    price_gteq price_lteq place_cont memo_cont title_cont memo_and_title_cont
  #    )
  #  params.require(:q).permit(search_conditions)
  #end

  private def set_lesson_tags_to_gon
    @lesson = current_user.adviser.lessons.find(params[:id])
    gon.genre_tags = @lesson.genre_list
  end
end
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/05 12:32

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

    キャンセル

check解決した方法

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Ruby on Rails

    9091questions

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

  • Ruby on Rails 4

    2551questions

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