このページの内容は以下のリポジトリに1日遅れで反映されます(記事執筆前に前日分をコミットしています)。
https://github.com/hkob/hkob_blog
はじめに
Rails Tips の 78 回目です。昨日は新しい記事を登録するときに自分の user_id を設定するようにしました。今日はあまり時間がないので、記事にユーザの所有・非所有を取り扱うメソッドを追加してみます。
article_spec
まず、article が user の所有物かどうかを調べるメソッドである owned_by?(user)
をテストしてみます。以前記述した「配列メソッド呼び出し」に一つテストセットを追加するだけでテストできます。
context "複数の Article オブジェクトについて" do let!(:targets) { articles(*%i[article1 can_delete]) } subject { targets } it_behaves_like "配列メソッド呼び出し" do let(:test_set) do { archived?: [nil, [false, false]], owned_by?: [article.user, [true, false]], } end end end
当然エラーになるので、owned_by?
を article.rb
に追加します。
# @param [User] u 確認するユーザー # @return [TrueClass, FalseClass] ユーザーが所有していたら true def owned_by?(u) user_id == u.id end
記事を書いたユーザの名前を取得するメソッド user_name もテストしてみます。先ほどの後ろに追加します。
user_name: [nil, %w[hkob can_delete]],
user_name メソッドを作ってもいいのですが、せっかくなので delegate
で実装しましょう。わかりにくいかもしれませんが、user
に対する name
というメソッドを article
から呼べるようにする仕組みです。ただし、prefix: true
がついているので、article
から見えるメソッド名は user_name
になります。
delegate :name, to: :user, prefix: true
おわりに
edit や index の描画をするときに必要になる owned_by?
と user_name
を先に実装しました。今日は入試で時間がなかったため、短くてすみません。