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

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

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

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

Q&A

解決済

1回答

1319閲覧

Railsの配列について・・・

probaseball

総合スコア113

Ruby on Rails 4

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

0グッド

0クリップ

投稿2016/01/11 10:48

編集2016/01/12 01:19

お世話になります。

Railsの配列についてわからないことがありましたので、質問させていただきます。

外部ファイルのクラス内メソッドから配列を読み込んで、コントローラー内で読み込んだ配列をランダム化し、ビューでランダム化した配列を表示したいのですが、表示できません。どうすれば表示できるようになりますか?

よろしくお願いします

ruby

1#controller 2require_dependency('scripts.rb') 3class HomeController < ApplicationController 4 def index 5 6 @card = Array.new 7 8 Scripts::Card.new.spade.each{|arr| @card << arr} if params[:spade] 9 Scripts::Card.new.heart.each{|arr| @card << arr} if params[:heart] 10 Scripts::Card.new.dia.each{|arr| @card << arr} if params[:dia] 11 Scripts::Card.new.club.each{|arr| @card << arr} if params[:club] 12 13 @select_card = @card.sample if params[:enter] 14 15 end 16 17end 18

ruby

1#scripts.rb 2 3module Scripts 4 5 class Card 6 7 def spade 8 $basic = ["S1","S2","S3","S4","S5","S6","S7","S8","S9","S10","S11","S12","S13"] 9 end 10 11 def heart 12 $basic = ["H1","H2","H3","H4","H5","H6","H7","H8","H9","H10","H11","H12","H13"] 13 end 14 15 def dia 16 $basic = ["D1","D2","D3","D4","D5","D6","D7","D8","D9","D10","D11","D12","D13"] 17 end 18 19 def club 20 $basic = ["C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","C11","C12","C13"] 21 end 22 23 end 24 25end 26

ruby

1#view 2<%= form_tag(index_path,multipart: true)do %> 3 <div class="form-group"> 4 5 <%= tag :input,{:type =>'submit',:class =>'button',:name=>'spade',:value =>'スペード'} %><br> 6 7 <%= tag :input,{:type =>'submit',:class =>'button',:name=>'heart',:value =>'ハート'} %><br> 8 9 <%= tag :input,{:type =>'submit',:class =>'button',:name=>'dia',:value =>'ダイア'} %><br> 10 11 12 <%= tag :input,{:type =>'submit',:class =>'button',:name=>'club',:value =>'クラブ'} %><br> 13 </div> 14 <%= submit_tag"リフレッシュ",:class =>'button',:name =>'enter' %> 15<% end %> 16<% unless @select_card .blank? %> 17 <h2><%= @select_card %></h2> 18<% end %>

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

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

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

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

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

guest

回答1

0

ベストアンサー

ビューから呼び出されるコントローラメソッドは常にindexで、ビューのインプットがSubmitだけという事は、indexメソッドのうち、処理されるのは一つだけだ、という事にお気づきですか?
スペード、ハート、ダイア、クラブのSubmitをクリックした場合は、@cardに値が格納されますが、@select_cardに値は格納されません。
リフレッシュのSubmitをクリックした場合は、空の配列が格納されている@card.sampleが格納されています。

投稿2016/01/11 15:24

rifuch

総合スコア1901

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

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

probaseball

2016/01/12 01:38

では、各ボタンを押したときにそれぞれの配列にいれて、ランダムに表示させたい場合はどのようにすれば表示できますか?
rifuch

2016/01/12 01:43

ボタンを押すたびに、indexメソッドで@cardが初期化されている事に気づいていますか? 状態を維持しながら遷移させるには、セッションかパラメータで状態を引き回す必要があります。
probaseball

2016/01/12 02:06

なるほど、ボタンを押すたびに初期化されてたら表示できないですよね。 具体的にはどのようにしたらいいですか?
rifuch

2016/01/12 02:17

webシステムは基本的に、スタンドアロンのプログラムと違い、ステートレスです。 ページが表示されて、次の画面に遷移するたびに、リクエストを受けたサーバー側は新しいリクエストだと認識して処理します。 このことは、Rails等のwebシステムの基礎の基礎ですから、このあたりを理解しないと、この先に進むのは難しいでしょう。改めて勉強される事をお勧めします。 で、サーバーとクライアントがやりとりをした状態(おっしゃっている例では、カードを配列に入れた状態)を、リクエストのたびに呼び出して復帰させる必要がある訳です。 具体的な方法は、パラメータを使って状態そのものをリクエストのたびに送ってあげるか、セッションなどの仕組みを使ってサーバー側に保存しておき、それを復帰させるかになります。 「webシステム」「状態維持」等をキーワードに、色々調べて身につけてみてください。
probaseball

2016/01/12 02:23

ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問