has_statuses メソッドを定義する StatusesExtension というモジュールを作成したいと思います。クラスが StatusesExtension を拡張すると、それらのステータスの検証、スコープ、およびアクセサーが含まれます。モジュールは次のとおりです。
module StatusesExtension
def has_statuses(*status_names)
validates :status, presence: true, inclusion: { in: status_names }
# Scopes
status_names.each do |status_name|
scope "#{status_name}", where(status: status_name)
end
# Accessors
status_names.each do |status_name|
define_method "#{status_name}?" do
status == status_name
end
end
end
end
このモジュールを拡張するクラスの例を次に示します。
def Question < ActiveRecord::Base
extend StatusesExtension
has_statuses :unanswered, :answered, :ignored
end
私が直面している問題は、スコープが定義されている間、インスタンス メソッド (回答済み?、未回答?、および無視された?) が定義されていないことです。例えば:
> Question.answered
=> [#<Question id: 1, ...>]
> Question.answered.first.answered?
=> false # Should be true
モジュールを使用して、モジュールの単一のクラス メソッド (has_statuses) のコンテキスト内でクラス メソッド (スコープ、検証) とインスタンス メソッド (アクセサー) の両方を定義するにはどうすればよいですか?
ありがとうございました!