🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

Ruby on Rails

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

Q&A

解決済

2回答

444閲覧

バリデーションでエラーメッセージを表示させたい。

jyon3030

総合スコア11

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/11/29 02:21

バリデーションを追加しエラーメッセージを表示させたい。

attendance.rbというモデルにバリデーションを追加させたいのですが、カラムのモデルが違うためエラーが出ます。

Userクラスが持っているカラム: finish_work_time(指定勤務時間)
Attendanceクラスが持っているカラム: finish_schedule_time(終了予定時間)

これをattendance.rbに記述したい

バリデーションの具体的な内容は
・finish_schedule_time(終了予定時間) よりも finish_work_time(指定勤務時間)が早いものは無効

貴重なお時間をとらせてしまい申し訳ありません。
お忙しいと思いますが何かアドバイス頂けないでしょうか、、汗

発生している問題・エラーメッセージ

NameError in AttendancesController#update_overtime undefined local variable or method `finish_work_time' for #<Attendance:0x00007fbc674d8c78> Did you mean? finished_at

該当のソースコード

class Attendance < ApplicationRecord def finish_schedule_time_test errors.add(:finish_work_time, "より早い終了予定時間は無効です") if finish_schedule_time < finish_work_time end

試したこと

undefined local variable or method `finish_work_time
以上のようなエラー内容からfinish_work_timeというメソッドが見つからないとされているのでUserクラスから無理やり引っ張ってきたのですが

undefined local variable or method `params' というエラーが発生した為出来ませんでした。

def finish_schedule_time_test
_ user = User.find(params[:user_id])errors.add(:finish_work_time, "より早い終了予定時間は無効です") if finish_schedule_time < user.finish_work_time
end

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

maisumakun

2019/11/29 02:28

UserとAttendanceの関係はどのようなものですか?
jyon3030

2019/11/29 02:38

わざわざ回答ありがとうございます。汗 class User < ApplicationRecord has_many :attendances, dependent: :destroy end class Attendance < ApplicationRecord belongs_to :user end User=親 Attendance=子 で関連付けしています。
guest

回答2

0

たしか User と Attendance の関連の定義はできていたと思うので、その前提で
if finish_schedule_time < finish_work_time
if finish_schedule_time < user.finish_work_time

投稿2019/11/29 02:28

winterboum

総合スコア23567

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

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

jyon3030

2019/11/30 00:32

的確な助言のおかげで無事に解決出来ました! 以前にも教えて頂いて本当にありがとうございます! また一つ勉強させて頂きました。 バリデーションは作動するようになったのですが、設定がうまく出来ていないみたいで次に質問させて頂きます。汗
guest

0

自己解決

if finish_schedule_time < finish_work_time を
if finish_schedule_time < user.finish_work_timeに書き換えると解決できました!

回答して下さりありがとうございます!

投稿2019/11/30 00:35

jyon3030

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問