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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

1161閲覧

変数を使ってメソッドをすっきりさせたい!Ruby

takeo7

総合スコア18

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2016/09/15 05:39

編集2016/09/15 05:40

###前提・実現したいこと
下記のメソッドをtimesメソッドを使用してすっきりさせたいです。
エラーメッセージの所は下記のようにすれば良いということはわかるのですが、if文で判定しているところをどうすれば変数を使ってまとめれるのかがわかりません。
助けてください!

###該当のソースコード

def add_errors 5.times do |n| if date1.present? && date1 < Date.today errors.add(:date, "※#{n}番目がエラー。") end if date2.present? && date2 < Date.today errors.add(:date, "※#{n}番目がエラー。") end if date3.present? && date3 < Date.today errors.add(:date, "※#{n}番目がエラー。") end if date4.present? && date4 < Date.today errors.add(:date, "※#{n}番目がエラー。") end if date5.present? && date5 < Date.today errors.add(:date, "※#{n}番目がエラー。") end end end

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

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

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

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

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

guest

回答2

0

ベストアンサー

実行できるだけのコードが示されていないので、実行してませんが、簡単にやるなら、

Ruby

1def add_errors 2 DATES=[date1,date2,date3,date4,date5] 3 5.times do |n| 4 if DATES[n].present? && DATES[n] < Date.today 5 errors.add(:date, "※#{n}番目がエラー。") 6 end 7 end 8end

date1の正体が不明ですが、ローカル変数なのであれば、

Ruby

1def add_errors 2 5.times do |n| 3 daten = binding.local_variable_get("date#{n}") 4 if daten.present? && daten < Date.today 5 errors.add(:date, "※#{n}番目がエラー。") 6 end 7 end 8end

と言うことも出来ます。メソッド呼び出しなのであれば、

Ruby

1def add_errors 2 5.times do |n| 3 daten = send("date#{n}") 4 if daten.present? && daten < Date.today 5 errors.add(:date, "※#{n}番目がエラー。") 6 end 7 end 8end

投稿2016/09/15 08:19

otn

総合スコア84423

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

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

takeo7

2016/09/15 09:33

ご回答ありがとうございます! メソッドだったので一番下のコードを参考にさせていただきました! めちゃくちゃスッキリです! ご丁寧な回答ありがとうございます!
guest

0

これでどうでしょう。
確かめてないので、これで正しいかわかりません。
(Rubyを完璧に使いこなしているわけではないので...)

ruby

1def add_errors 2 5.times do |n| 3 5.times do |i| 4 if "date#{i}".present? && "data#{i}" < Date.today 5 errors.add(:date, "※#{n}番目がエラー。") 6 end 7 end 8 end

投稿2016/09/15 06:34

編集2016/09/15 07:07
programming

総合スコア476

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

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

takeo7

2016/09/15 06:46

ご回答ありがとうございます! そうなのです。 全てをチェックしたいです。 そして[date1]とか[date2]の数字の部分も変数にできないかな?と思っているのでがこれができず...。
takeo7

2016/09/15 07:21

何度もありがとうございます! 試させていただきました! メドッドが文字列として判定されてしまいうまくいかなかったですTT ただなんとなくイメージは湧いてきました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問