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

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

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

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

Ruby on Rails 4

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

Q&A

解決済

1回答

3018閲覧

オブジェクト名+変数を組み合わせて、ループを回したい

envogue

総合スコア12

Ruby

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

Ruby on Rails 4

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

0グッド

0クリップ

投稿2016/06/30 12:34

編集2016/06/30 12:47

環境 Ruby 2.3, Rails 4.2.6
ループ中の変数の扱いで困ったので相談させてください。
フォームを作成して、その中で申し込む日付を選択するラジオボタンを下記のように作りました。

ruby

1<%= radio_button_tag :apply, 1, false %> 2<%= @request.from1_date + @request.to1_date %> 3 4<%= radio_button_tag :apply, 2, false %> 5<%= @request.from2_date + @request.to2_date %> 6 7<%= radio_button_tag :apply, 3, false %> 8<%= @request.from3_date + @request.to3_date %> 9 10<%= radio_button_tag :apply, 4, false %> 11<%= @request.from4_date + @request.to4_date %> 12 13<%= radio_button_tag :apply, 5, false %> 14<%= @request.from5_date + @request.to5_date %>

これを見ていてuptoでループさせたいと考えて、次のように書いたのですが
@request.from"{n}"_date の部分で、Syntax Errorが出ました。

ruby

1<% 1.upto(5) do |n| %> 2 <%= radio_button_tag :apply, "#{n}", false %> 3 <%= @request.from"#{n}"_date + @request.to"#{n}"_date %> 4<% end %>

オブジェクト名+変数を組み合わせて、ループを回したいのですが
どういう書き方をするべきか、教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

from1_dateなどは、@requestオブジェクトのメンバ(メソッド?)ですよね?
このような名前は静的に記述する必要があるので、「"オブジェクト名"+変数」で名前をつけることはできません。

from_date関数に引数として数値を入れ、from_date関数内では、引数次第で返す値を変更すればできると思います。

ruby

1<% 1.upto(5) do |n| %> 2 <%= radio_button_tag :apply, "#{n}", false %> 3 <%= @request.from_date("#{n}") + @request.to_date("#{n}") %> 4<% end %> 5 6def from_date(i) 7 case i 8 when 1 then 9 1の場合に返す値 10 when2 then 11 1の場合に返す値 12 ... 13 end 14end

投稿2016/06/30 12:47

shanxia

総合スコア1038

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

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

envogue

2016/06/30 13:10

ありがとうございます。 分かりやすくご説明いただいたので理解できました。 from_date の処理が下記のように、同じようなコードが 並んでしまうのはどうしようもないでしょうか? def from_date(i) case i when "1" self.from1_date.strftime("%Y/%m/%d %H:%M") when "2" self.from2_date.strftime("%Y/%m/%d %H:%M") when "3" self.from3_date.strftime("%Y/%m/%d %H:%M") when "4" self.from4_date.strftime("%Y/%m/%d %H:%M") when "5" self.from5_date.strftime("%Y/%m/%d %H:%M") end end
shanxia

2016/07/01 01:51

変数名が異なる以上、どこかで判断する必要がありますので、ある程度は仕方ないかと。 もっと共通化を図るならば、次の様なやり方があると思います。 ・一時的にメンバ変数を格納する変数を用意し、whenの中でそこへ代入し、caseを抜けた後にstrfimeで変換する。 ・from[n]_date変数を配列またはハッシュにして、iの値で取り出せる様にする。
envogue

2016/07/07 10:36

返信遅くなりましてすみません。コメントありがとうございます。 自分なりに工夫してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問