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

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

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

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

Q&A

解決済

1回答

244閲覧

Rails : createでsaveされない

innjera

総合スコア132

Ruby on Rails 5

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

0グッド

0クリップ

投稿2018/12/05 09:50

非常に基本的なことだと思いますが、何故か新規modelcreateされません。
原因として考えられるのは、migration fileは日時をdatetimeとしている一方で、
入力の便宜上formではday parttime partに分けています。ただし、その為の処理はしっかり書けているとと毛のですが、原因がわかりません。

ruby

1##tender model 2 3id :bigint(8) not null, primary key 4seller_id :bigint(8) not null 5starts_at :datetime not null 6ends_at :datetime not null 7status :string default("draft"), not null 8created_at :datetime not null 9updated_at :datetime not null 10 11 12class Tender < ApplicationRecord 13 belongs_to :seller 14 15 STATUS_VALUES = %w(draft ready ongoing finished) 16 17 validates :starts_at, presence: true 18 validates :ends_at, presence: true 19 validates :status, inclusion: {in: STATUS_VALUES} 20 21 scope :open, -> { where(status: "ready")} 22 23 before_save do 24 if starts_at_date_part && starts_at_time_part 25 self.starts_at = "#{starts_at_date_part} #{starts_at_time_part}" 26 end 27 28 if ends_at_date_part && ends_at_time_part 29 self.ends_at = "#{ends_at_date_part} #{ends_at_time_part}" 30 end 31 end 32 33 attr_writer :starts_at_date_part, :starts_at_time_part, 34 :ends_at_date_part, :ends_at_time_part 35 36 def starts_at_date_part 37 @starts_at_date_part ||= starts_at&.strftime('%Y-%m-%d') 38 end 39 40 def starts_at_time_part 41 @starts_at_time_part ||= starts_at&.strftime('%H:%M') 42 end 43 44 def ends_at_date_part 45 @ends_at_date_part ||= ends_at&.strftime('%Y-%m-%d') 46 end 47 48 def ends_at_time_part 49 @ends_at_time_part ||= ends_at&.strftime('%H:%M') 50 end 51 52end 53 54 55##Controller 56 def new 57 @tender = Tender.new 58 time0 = Time.current.beginning_of_day 59 @tender.starts_at = time0.advance(days: 1, hours: 10) 60 @tender.ends_at = time0.advance(days: 3, hours: 15) 61 end 62 63 def create 64 @tender = Tender.new(tender_params) 65 @tender.seller = current_seller 66 if @tender.save 67 binding.pry 68 flash.notice = "入札会を設定しました。" 69 redirect_to :sellers_tenders 70 else 71 render "new" 72 end 73 end 74 75 76##form 77 78<%= form_for @tender, url: :sellers_tenders do |f| %> 79 80 <div class="form-group"> 81 <%= f.label :starts_at_date_part, "入札「開始」日"%>&nbsp;&nbsp;&nbsp;<span class="badge badge-pill badge-danger">必須</span> 82 <div class='input-group'> 83 <div class="input-group-prepend"> 84 <span class="input-group-text"><i class='far fa-calendar-alt'></i></span> 85 </div> 86 <%= f.text_field :starts_at_date_part, class: 'form-control date-picker', required: true %> 87 </div> 88 </div> 89 <div class="form-group" > 90 <%= f.label :starts_at_time_part, "入札「開始」時間"%>&nbsp;&nbsp;&nbsp;<span class="badge badge-pill badge-danger">必須</span> 91 <div class='input-group'> 92 <div class="input-group-prepend"> 93 <span class="input-group-text"><i class='far fa-clock'></i></span> 94 </div> 95 <%= f.text_field :starts_at_time_part, class: 'form-control time-picker', required: true %> 96 </div> 97 </div> 98 99 <div class="form-group" > 100 <%= f.label :ends_at_date_part, "入札「終了」日"%>&nbsp;&nbsp;&nbsp;<span class="badge badge-pill badge-danger">必須</span> 101 <div class='input-group'> 102 <div class="input-group-prepend"> 103 <span class="input-group-text"><i class='far fa-calendar-alt'></i></span> 104 </div> 105 <%= f.text_field :ends_at_date_part, class: 'form-control date-picker', required: true %> 106 </div> 107 </div> 108 <div class="form-group" > 109 <%= f.label :ends_at_time_part, "入札「終了」時間" %>&nbsp;&nbsp;&nbsp;<span class="badge badge-pill badge-danger">必須</span> 110 <div class='input-group'> 111 <div class="input-group-prepend"> 112 <span class="input-group-text"><i class='far fa-clock'></i></span> 113 </div> 114 <%= f.text_field :ends_at_time_part, class: 'form-control time-picker', required: true %> 115 </div> 116 </div> 117 118 <div class="form-group mt-5" > 119 <%= f.submit "入札会を設定する", class: 'btn btn-success' %> 120 </div> 121 122 <% end %> 123

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

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

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

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

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

guest

回答1

0

自己解決

before savebefore validationで解決しました。

投稿2018/12/05 10:45

innjera

総合スコア132

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問