懸念があります:
# app/models/concerns/rolable.rb
module Rolable
extend ActiveSupport::Concern
included do
rolify
Role.find_each do |role|
scope "#{role.name.pluralize}", -> { joins(:roles).where(roles: {name: send("#{role.name}_role_name")}).distinct }
end
end
class_methods do
Role.find_each do |role|
define_method "#{role.name}_role_name" do
role.name
end
define_method "#{role.name}_role_id" do
role.id
end
end
end
Role.find_each do |role|
define_method("#{role.name}?") do
has_role? self.class.send("#{role.name}_role_name")
end
end
end
ご覧のとおり、一連のスコープ、クラス メソッド、およびインスタンス メソッドが定義されています。しかし、私は の繰り返しに満足していませんRole.find_each do |role| ... end
。
この重複をなくすにはどうすればよいですか?私はこれを試しました
Role.find_each do |role|
included do
...
end
class_methods do
...
end
end
included
しかし、複数のブロックがあるため機能しません。メソッドで抽出できますRole.find_each
が、あまり良くありません。
このコードを改善して重複を取り除くにはどうすればよいですか?