記事の検索は「セレクトボックスのカテゴリー検索」「フリーワードによるタイトル検索」の2種類があります。
著者、タグ、コンテンツ(記事内容)に関しても検索が行えるようにしてください。著者、タグはセレクトボックスによる選択、コンテンツ(記事内容)はフリーワード検索が行えるようにしてください。追加する各検索機能では、下書き状態の記事も検索できるように実装してください。
ActiveModelとはActiveRecordを継承しないクラスでもActiveRecordと同じような便利メソッドが使えるようになる優れものです。 validates メソッドなどがその一例です。
アプリを開発していると特定のモデル(≒テーブル)に紐づかないクラスを作りたくなる場合があります。例えば問い合わせ用にContactというクラスを作ったとして、愚直に自分でバリデーションを実装しようとすると以下のようになります。
class Contact
attr_accessor :title, :body
def valid?
title.present? && title.length < 100 && body.present? && body.length < 1000
end
end
Railsから入った人へ【attr_accessor】って? - Qiita
valid? メソッドがかなり読み取りづらいです。ActiveModelを導入すると以下のように書き換えられます。
class Contact
include ActiveModel::Validations
attr_accessor :title, :body
validates :title, presence: true, length: { maximum: 100 }
validates :body, presence: true, length: { maximum: 100 }
end
バリデーションを使う側では以下のように記載できます。
def create
contact = Contact.new(title: "aaa", body: "bbb")
if contact.valid?
# hogehoge
else
# fugafuga
end
end
ActiveModelを使うとActiveRecordを継承していないクラスにおいても、ActiveRecordと同じように扱えるメリットを享受できます。