とりあえず方針を。
例えば Item
の一覧表示で絞り込みをしたいとします。
Item
には title:string
カラムと year:integer
カラムがあるとします。
/items
にアクセスすると ItemsController
の index
アクションが働く,と。ここで絞り込みをやりたいわけですね。
検索条件を保持する SearchItem
モデルを作りましょう。
こんなふうに書きます。
rb:models/search_item.rb
1class SearchItem
2 extend ActiveModel::Naming
3 include ActiveModel::Conversion
4
5 attr_accessor :keyword, :year
6
7 def persisted?
8 false
9 end
10
11 def initialize(params)
12 # ここの書き方や処理は目的によりさまざま
13 self.keyword = params[:keyword]
14 self.year = params[:year]
15 end
16end
ActiveModel::Naming
って何?とか,persisted?
は何をするもの?というのは,ご自分でお調べになってください(すいません,説明できないだけです)
index
アクションでは
rb:controllers/items_controller.rb
1# 抜粋
2 def index
3 @search_item = SearchItem.new(params[:search_item])
4 @items = Item.search(@search_item)
5 end
みたいにして,@search_item
によって絞り込んだ @items
を用意します。
Item.search
メソッドに実際の検索処理を書きます。
検索フォームは
rb:views/items/index.html.erb
1<%= form_for @search_item, url: :items, html: {method: :get} do |f| %>
2 <%= f.text_field :keyword %>
3 <%# 中略 %>
4<% end %>
みたいな感じですね。
@search_item
に対する form_for
を使えばいいです。
以上,実際に動かさないで適当にコード書いてますので,ちょっと間違ってたらゴメンなさい。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。