学習項目

現状

記事の検索は「セレクトボックスのカテゴリー検索」「フリーワードによるタイトル検索」の2種類があります。

改修後

著者、タグ、コンテンツ(記事内容)に関しても検索が行えるようにしてください。著者、タグはセレクトボックスによる選択、コンテンツ(記事内容)はフリーワード検索が行えるようにしてください。追加する各検索機能では、下書き状態の記事も検索できるように実装してください。

ActiveModelとは

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と同じように扱えるメリットを享受できます。

参考https://railsguides.jp/active_model_basics.html