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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

1246閲覧

railsでhashからランダムに1組のkey, value を取得してviewで使用する方法

kanou-shimon

総合スコア6

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/12/23 09:33

編集2020/12/23 13:37

現在、以下のようはhashデータから人組のkey, valueをそれぞれ変数に入れてviewで使いたいと思っています。
調べてみたのですが、以下の方法ではできなかったので、どなたか手助けいただけますと幸いです。

controller @local_media = LocalMedium.all @media_hokkaidou = @local_media.where(prefecture: "北海道") @media_aomori = @local_media.where(prefecture: "青森県")  ・  ・  ・ @modals = {"modal-hokkaidou": @media_hokkaidou, "modal-aomori": @media_aomori} @todays_key = @modals.to_a.sample[0] 配列に直して0番目=keyを取得 @todays_value = @modals.to_a.sample[1] 同様にしてvalueを取得
html.erb <div id="<% @todays_key %>" class="modal js-modal"> <div class="modal-bg js-modal-close"> </div> <div class="modal-content"> <table> <tr> <th>サイト名</th> <th>サイト紹介</th> </tr> <% @todays_value.each do |medium| %> <tr> <td><%=link_to medium.site_name , medium.site_url %></td> <td><%=link_to medium.intro , medium.site_url %></td> </tr> <% end %> </table> </div> </div>

###追記

viewで@todays_valueに対応するLocalMedium内の"prefecture"カラムを取得して、

今日のおすすめは「~~~」

のようにviewで表示したいと考えています。
以下のコードを書いてみたのですが、うまくいかったので教えていただきたいです。

controller @todays_key, @todays_value = @modals.to_a.sample @todays_prefecture = @todays_value.select("prefecture")
html.erb <header class="text-center w-md-50 mx-auto mb-8"> <h2 class="h1">今日のおすすめ地域</h2> <p class="h5">今日のおすすめ地域は「<%= @todays_prefecture %>」です。</p> </header> <div id="<% @todays_key %>"> <table> <tr> <th>サイト名</th> <th>サイト紹介</th> </tr> <% @todays_value.each do |medium| %> <tr> <td><%=link_to medium.site_name , medium.site_url %></td> <td><%=link_to medium.intro , medium.site_url %></td> </tr> <% end %> </table>

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

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

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

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

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

guest

回答2

0

おしい

todays= @modals.to_a.sample @todays_key = todays[0] @todays_value = todayse[1]

投稿2020/12/23 12:52

winterboum

総合スコア23567

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

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

winterboum

2020/12/23 12:53

開きっぱにしてたので回答済なのを気が付かなかった、ごめん
kanou-shimon

2020/12/23 13:47

ご回答いただきありがとうございます。
guest

0

ベストアンサー

@todays_key@todays_value の組み合わせがバラバラになるという話ですよね?
@todays_key@todays_valuesample を二度呼んでいるのでそれぞれ違う結果が入ってます。
(ランダムなので同じになることもある)

組み合わせをそのままにするには以下のようにします。

ruby

1@todays_key, @todays_value = @modals.to_a.sample

多重代入を使っているので分かりにくいかもしれませんが、これは以下のコードと結果的に同じ(はず)です

ruby

1# ひとつ取り出す 2sample = @modals.to_a.sample 3# 取り出した key [0] と value [1] 4@todays_key = sample[0] 5@todays_value = sample[1]

投稿2020/12/23 11:43

neko_daisuki

総合スコア2090

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

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

kanou-shimon

2020/12/23 13:29

お二人ともご回答いただきありがとうございます。 そちらの問題は解決することができました。 また、もう一点問題があったのですが、 @todays_valueに合わせてLocalMediumテーブル内から"prefecture"カラムを取得して、追記のビューのように記載したいと思っています。 私のコードでは、追記のようになってしまったので、お手数ですが、お力添えいただけると助かります。 何卒、よろしくお願いいたします。
neko_daisuki

2020/12/23 13:50

@todays_prefecture = @todays_value.first.prefecture こうでしょうか。@todays_value の中身は配列(みたいなやつ)なので、 それの最初の要素のprefecture を取り出します。 上のコードは感覚的に気持ち悪いので調べたら、 whereに指定した値を取得できようなので、下のでもいけそうです。 @todays_prefecture = @todays_value.where_values_hash["prefecture"]
kanou-shimon

2020/12/24 08:53

ちゃんと表示されました。ご回答ありがとうございます。 whereは条件に一致するデータを全て返すので、この場合で使ったら"prefecture"が複数取得されてしまうのか?と思っていましたが、、、 配列とデータ取得に関して、理解が深まりました。 今回もお力をお貸しいただき、ありがとうござました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問