如何使用define_method编写带问号的方法

Moh*_*out 2 ruby metaprogramming ruby-on-rails

我有多种类型的用户模型(admin,normal,..).我创建循环来定义类似admin?normal?如下的方法:

class User
  TYPES = %w(admin normal)
  User::TYPES.each do |roleVal|
    define_method(roleVal.to_sym) { self.role == roleVal }
  end
end
Run Code Online (Sandbox Code Playgroud)

上面的代码正在工作User.first.admin,但我需要将其称为User.first.admin?.

带问号的define_method的语法是什么?如果不可能使用define_method,如何在元编程中创建带问号的方法?

Mic*_*ohl 5

你想要的是这个:

define_method("#{roleVal}?") { ... }
Run Code Online (Sandbox Code Playgroud)