住所検索(ransack)

内容

投稿を住所で絞り込めるように実装する

住所検索機能

1. ransackで関連するモデルのカラムを検索する

フォームタグの要素名に、関連するモデル名関連するモデルのカラム名を指定する
postモデルに紐づくaddressモデルのカラム名(postal_code)を検索条件にしたい時、f.フォームヘルパー :要素名、の要素名をaddress_postal_code_eqとする
search.html.erb

<%= search_form_for @q, url: posts_path do |f| %>
  <%= f.text_field :address_postal_code_eq %>

2. ビューを編集

投稿一覧/詳細ページに住所を追加する

ページネーションのデザイン変更

ページネーション機能はkaminariというgemを用いて実装しているが、デザインがいまいちなので自分でカスタマイズしてみる

1. kaminariのviewファイルを作成

viewフォルダの中にkaminariのview一覧を作成
ターミナル

rails g kaminari:views default

2. 日本語化

kaminariのgemのデフォが英語になっているので、これを日本語環境に変える
config/application.rb

config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

一行目は、日本語環境を適用、二行目は複数のlacaleファイル(後述)が適用されるコード
次にconfig/localesフォルダーにkaminari.ja.ymlを作成し、コード記述
config/locales/kaminari.ja.yml

ja:
  views:
    pagination:
      first: "&laquo; 最初"
      last: "最後 &raquo;"
      previous: "&lsaquo; 前へ"
      next: "次へ &rsaquo;"
      truncate: "..."

3. 該当のcssファイルを編集

index.css

.pagination{
  display: flex;
  justify-content: flex-start;
}

.pagination span{
  width: 3em;
  background-color: #fff;
  text-align: center;
  border: solid 1px #ddd;
  margin-right: 0.3vw;
  transition: .3s;
  -webkit-transform: scale(1);
  transform: scale(1);
}

.pagination span.current{
  background-color: limegreen;
  color: #fff;
}

.pagination span:hover{
  background-color: #ddd;
  transition: .3s;
  -webkit-transform: scale(1.1);
  transform: scale(1.1);
}

4. 投稿件数を表示したい場合

投稿何件中何件表示、という表示をさせたい時は以下のように記述する
index.html.erb

<%= @posts.total_count %>件中<%= @posts.offset_value + 1 %>〜<%= @posts.offset_value + @posts.length %>件表示

次回

画像複数投稿機能を実装