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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

1621閲覧

railsでeachで一定の値でグループ化?した情報を出力する方法

yoshimitsu41

総合スコア36

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2017/11/08 14:51

編集2017/11/09 05:50

rails初心者です。
rails5で勉強中です。

都道府県、駅、路線名が別々もモデルになっておりアソシエーションを組んでおります。

rugy

1#########モデル######### 2#pref.rb(都道府県) 3class Pref < ApplicationRecord 4 has_many :stations 5end 6 7#station.rb(駅名) 8class Station < ApplicationRecord 9 belongs_to :pref 10 belongs_to :line, foreign_key: 'line_id', primary_key: 'line_id' 11end 12 13#line.rb(路線名) 14class Line < ApplicationRecord 15 has_many :stations, class_name: 'Station', foreign_key: 'line_id', primary_key: 'line_id' 16end 17

rugy

1#########コントローラー######### 2#stations_controller.rb 3class StationsController < ApplicationController 4 def index 5 @pref_name = Station.find_by(pref_id: params[:area_id]) 6 @stations = Station.where(pref_id: params[:area_id]) 7 end 8 9 def show 10 end 11 12end 13

rugy

1#########ビュー######### 2#stations/index.html.erb 3 4<div class="container"> 5 <div class="row"> 6 <div class="col-md-12"> 7 <h1><%= @pref_name.pref.name %>|<%= @stations.count %>駅|Stations#index</h1> 8 <p>Find me in app/views/stations/index.html.erb</p> 9 10 <% @stations.each do |station| %> 11 <div class="panel panel-default"> 12 <div class="panel-heading"><%= station.line.line_name %></div> 13 <ul class="list-group"> 14 <li class="list-group-item"><%= station.station_name %></li> 15 </ul> 16 </div> 17 <% end %> 18 </div> 19 </div> 20</div> 21

DBはmysqlで
prefsテーブル

id:integer
pref_cd:integer
name:string

stationsテーブル

id:integer
pref_id:integer
station_cd:integer
station_name:string
line_id:integer

linesテーブル

id:integer
line_id:integer
line_name:string

現状は下記のような表示になってしまっています。
イメージ説明

  • 【山手線】
  • 大崎
  • 【山手線】
  • 五反田
  • 【山手線】
  • 目黒

上記のようになっているのを…

  • 【山手線】
  • 大崎
  • 五反田
  • 目黒
  • 山手線の駅が全部出力されると…
  • 【南武線】
  • 矢野口
  • 稲城長沼
  • 南多摩

と言った具合に路線でグルーピング?して出力したいです。
各駅が持っているline_id(線路のID)をグループ化してどうにかしてeachで回せないかと考えていますが答えがでません。
どのように処理すれば解決しますでしょうか???

ぜひともご教授お願い致します!!!

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

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

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

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

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

guest

回答1

0

ベストアンサー

group_by を使う。

ruby

1line_group= Station.where(pref_id: params[:area_id]).group_by(&:line_id) 2 3line_group.each do |key, stations| 4 5 stations.each do |station| 6 7 end 8end

投稿2017/11/10 06:19

kiichi54321

総合スコア1984

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

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

yoshimitsu41

2017/11/10 09:58

ありがとうございます! ほぼほぼ近い表示がされました! 記述したのは下記です。 【stations_contoroller.rb】 @line_group = Station.where(pref_id: params[:area_id]).group_by(&:line_id) 【stations/index_html.rb】 <% @line_group.each do |key,stations| %> <h2><%= key %></h2> <ul> <% stations.each do |station| %> <li><%= station.station_name %></li> <% end %> </ul> </div> <% end %> しかし <%= key %>の部分がlline_idの数値が表示されてしまいます。 本来<%= key %>の部分にはline_idに紐づくstation.rbのline_nameを表示させたいと思っています。 <%= key.line.line_name %> としてしまってはエラーになってしまいます。 どのように対処すればよいでしょうか??
kiichi54321

2017/11/10 10:10

line_group= Station.where(pref_id: params[:area_id]).group_by{|item| item.line.name} こんな感じで、 group_byの中身を変えるですかね。 あとは、idなので、@line_name_hash = Line.where(id:line_group.keys).map{|item| [item.id,item.name]}.to_h というのを作って、 @line_name_hash[key] ですかね
yoshimitsu41

2017/11/10 10:41

@line_group= Station.where(pref_id: params[:area_id]).group_by{|item| item.line.line_name} で動きました! 数日悩んでできなかった事が解決できてよかったです! 本当にありがとうございます!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問