

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

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

[code]

    #########モデル#########
    #pref.rb（都道府県）
    class Pref < ApplicationRecord
      has_many :stations
    end
    
    #station.rb（駅名）
    class Station < ApplicationRecord
      belongs_to :pref
      belongs_to :line, foreign_key: 'line_id', primary_key: 'line_id'
    end
    
    #line.rb（路線名）
    class Line < ApplicationRecord
      has_many :stations, class_name: 'Station', foreign_key: 'line_id', primary_key: 'line_id'
    end
    
    
    #########コントローラー#########
    #stations_controller.rb
    class StationsController < ApplicationController
      def index
        @pref_name = Station.find_by(pref_id: params[:area_id])
        @stations = Station.where(pref_id: params[:area_id])
      end
    
      def show
      end
    
    end
    
    
    #########ビュー#########
    #stations/index.html.erb
    
    <div class="container">
      <div class="row">
        <div class="col-md-12">
          <h1><%= @pref_name.pref.name %>｜<%= @stations.count %>駅｜Stations#index</h1>
          <p>Find me in app/views/stations/index.html.erb</p>
    
              <% @stations.each do |station| %>
                <div class="panel panel-default">
                      <div class="panel-heading"><%= station.line.line_name %></div>
                    <ul class="list-group">
                          <li class="list-group-item"><%= station.station_name %></li>
                    </ul>
                </div>
              <% end %>
        </div>
      </div>
    </div>
    
[/code]

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

現状は下記のような表示になってしまっています。

[![画像の説明をここに入力](https://i.stack.imgur.com/k9EGC.jpg)](https://i.stack.imgur.com/k9EGC.jpg)

【山手線】  
大崎  
【山手線】  
五反田  
【山手線】  
目黒  
上記のようになっているのを…

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

と言った具合に路線でグルーピング？して出力したいです。  
各駅が持っているline_id（線路のID）をグループ化してどうにかしてeachで回せないかと考えていますが答えがでません。  
どのように処理すれば解決しますでしょうか？？？  
ぜひともご教授お願い致します！！！


CC BY-SA 3.0
2017-11-09T06:05:30.560
39448
2017-11-10T05:19:40.170
26120
question
ruby-on-rails ruby
railsでeachで一定の値でグループ化？した情報を出力する方法


`group_by`を使ってこのようにすると

[code]

    @grouped_stations = @stations.group_by {|s| s.line.line_name}
    
[/code]

以下のようなハッシュが得られます

[code]

    {"山手線"=>[山手線の駅の配列], "南武線"=>[南部線の駅の配列]}
    
[/code]

後はこのハッシュをよしなにループして表示すれば良いでしょう。


CC BY-SA 3.0
2017-11-10T05:19:40.170
39472
2017-11-10T05:19:40.170
5793
39448
answer