2012年3月13日火曜日

都道府県別に表示する

簡単に都道府県別で分けれたらいいかと思い、プロジェクト内で作成したのでここにメモ

今回重要なのは都道府県をマッチさせなければならない為、登録の際に間違って登録されていたらうまく表示されない。

routes.rb
resources :users

resources :prefectures do
  resources :users
end

usersが存在するという仮定で作成
都道府県表示する為に

users_helper.rb
def choose_region
    %w(北海道 青森県 岩手県 宮城県 秋田県
        山形県 福島県 茨城県 栃木県 群馬県
        埼玉県 千葉県 東京都 神奈川県 新潟県
        富山県 石川県 福井県 山梨県 長野県
        岐阜県 静岡県 愛知県 三重県 滋賀県
        京都府 大阪府 兵庫県 奈良県 和歌山県
        鳥取県 島根県 岡山県 広島県 山口県
        徳島県 香川県 愛媛県 高知県 福岡県
        佐賀県 長崎県 熊本県 大分県 宮崎県
        鹿児島県 沖縄県
      )
  end

users_controller.rb
def index
    if params[:prefecture_id]
      @users = User.where(:PREF => NKF.nkf("-eW", params[:prefecture_id])).order("created_at DESC").paginate(:page => params[:page], :per_page => 40)
    else
      @users = User.where("NAME <> ''").order("created_at DESC").paginate(:page => params[:page], :per_page => 70)
    end
  end


ここでもしパラメーターが[prefecture_id]が来たらwhereで(:PREF)のNKF.nkf("-eW",)で変換されたパラメーター[:prefecture_id]を返すという設定。
NKFは前回でのブログでmysqlの文字コードが違う為に今回仕方なく設定している。

index.html.erb
<h3>都道府県別</h3>
  <% choose_region.collect do |p| %>
    <%= link_to p, prefecture_users_path(:prefecture_id => p),
      :class => 'prefectures' %>
  <% end %>

<div class="organization">
      <% @users.each do |user| %>
        <%= link_to(user.name, user) %><br/>
      <% end %>
    </div>

という形。choose_regionで都道府県をcollectで出し、それぞれをリンクにして、無理矢理prefecture_users_pathで指定しいる
今回は都道府県用のdbを作成しないので無理矢理パスを決めている。

以上のようにすれば都道府県がしっかり登録されていれば都道府県をクリックしたら都道府県別に表示された。

0 件のコメント:

コメントを投稿