我的用户模型有很多类型(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
以上代码适用于User.first.admin
,但我需要将其称为User.first.admin?
。
带有问号的define_method的语法是什么?
如果使用define_method
无法实现,那么如何在元编程中创建带问号的方法?
答案 0 :(得分:5)
你想要的是这个:
define_method("#{roleVal}?") { ... }
答案 1 :(得分:3)
使用define_method
定义此类方法非常简单。它足以传递以问号结尾的符号或字符串。
define_method(:admin?) do
# code
end
答案 2 :(得分:2)
符号中的结束问号没有什么特别之处:
class User
TYPES = %i(admin? normal?)
User::TYPES.each do |roleVal|
define_method(roleVal) { self.role == roleVal.to_s[0...-1] }
end
end
答案 3 :(得分:1)
你可以这样做。
class User
TYPES = %w(admin normal)
User::TYPES.each do |roleVal|
define_method("#{roleVal}?") do self.role == roleVal end
end
end
希望,这会对你有帮助。