0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

検索条件のチェックボックスの選択肢にトランザクションデータにある項目だけを表示する

Last updated at Posted at 2018-09-25

初心者です。ransackでの検索のチェックボックスの選択肢を天気情報のマスタテーブルのカラムとしていたんですが、「砂あらし」や「竜巻」などトランザクションデータにない項目も表示されてしまい、それで検索かけると検索結果になにも表示されないので、トランザクションデータにある項目だけチェックボックスに表示させたいと考えました。

調べたところ、joinsやincludesで2つのテーブルを結合するとできそうでした。
ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い

joinsで結合して、groupで集合化することでデータにある項目だけ表示することできました(includesではできず、joinsでできたんですが、理由はわかりません)。

huntsテーブル(釣果を登録するテーブル)
string :weather_main
・・・

weathersテーブル(マスタ)
string :weather_main(Clear、Cloud など)
string :weather_name(晴れ、くもり など)
・・・

アソシエーション

hunt.rb
belongs_to :weather, foreign_key: 'weather_main', primary_key: 'weather_main'
weather.rb
has_many :hunts, foreign_key: 'weather_main', primary_key: 'weather_main'

コントローラー

hunts_controller.rb
def index
  # weathersテーブルをhuntsテーブルのweather_mainにあるものに絞り込んで検索の選択肢をviewに渡す
  @weather = Weather.joins(:hunts).group('weather_main')
end

ビュー

hunts/index.html.erb
<%= search_form_for @search do |f| %>
  <%= f.collection_check_boxes :weather_main_in, @weather, :weather_main, :weather_name %>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?