想用 method_missing构造动态方法,以"can_" 开头
ruby 代码
- class User < ActiveRecord::Base
- def has_role?(role_in_question)
- @_list ||= self.roles.collect(&:name)
- return true if @_list.include?("admin")
- (@_list.include?(role_in_question.to_s) )
- end
-
- def method_missing(method_id,arg)
- method_name = method_id.id2name
- arr = method_name.split("_")
- if arr[0] == "can"
- has_role?(arg)
- else
- raise NoMethodError,"there is no method:#{method_name}"
- end
- end
- end
我跟踪后发现不执行此方法
分享到:
- 2007-12-27 09:16
- 浏览 927
- 评论(1)
- 论坛回复 / 浏览 (1 / 1899)
- 查看更多
相关推荐
Ruby中的`method_missing`是元编程的一个核心特性,它允许你在类或模块中处理未定义的方法调用。当你尝试调用一个不存在的方法时,Ruby会默认抛出`NoMethodError`异常,但如果你定义了`method_missing`方法,它就会...
在这个修改后的版本中,我们将`method_name`的打印语句移到了`times`块之外,这样无论何时调用`method_missing`,`method_name`都是可访问的,从而避免了死循环的问题。 #### 进一步讨论 1. **作用域的理解**:在...
gem install method_not_missing 外部依赖 PhantomJS(在OSX上brew install phantomjs ) 例子 require "method_not_missing" object = MethodNotMissing :: OmnipotentObject . new object . update ( [ 3 ] ) ## ...
本代码是个人编写的计算GaN量子阱内导带,价带(6*6哈密顿量)的光学特性,包含光吸收,光增益,量子效率,波函数,计算包含导带-价带,导带-导带,价带-价带内部的跃迁的所有计算,使计算量子体系的光吸收的理想...
针对描述中的主题"R语言下完全随机缺失条件下分类随机变量数据缺失插补方法的比较",我们将深入探讨R语言中处理数据缺失问题的方法,特别是针对完全随机缺失(Missing Completely at Random, MCAR)情况下的分类变量...
当有try-catch-finally语句的时候会提示信息“Couldn't resolve all exception handlers in method ” 4. Currently Jad ignores the contents of the Line Number Table Attribute and the Source File Attribute...
本文将深入探讨如何利用`method_missing`和`respond_to?`来创建动态方法,这是一种在Ruby社区中广泛使用的技巧,尤其是在诸如Rails这样的框架中。 #### 二、`method_missing`详解 `method_missing`是Ruby中的一个...
__id__ initialize method_missing singleton_method_undefined != __send__ instance_eval singleton_method_added == equal? instance_exec singleton_method_removed Kernel !~ enum_for
def method_missing(method_name, *args, &block) if method_name.to_s.start_with?("get_") attribute_name = method_name.to_s[4..-1] puts "Fetching #{attribute_name}" @attributes[attribute_name] else...
第 10 周:创客学院在 Ruby 中玩转元编程挑战: 使用method_missing重新定义对象在询问has_unknown_attribute时的Reacthas_unknown_attribute 。 使用define_method创建Ruby 内置attr_accessor方法的布尔版本。代码...
使用send , define_method和method_missing遍历不同的元编程技术 将您的思维扩展到元编程,并让您考虑可以在自己的代码中利用它的地方 设置 要求 该讲习班是使用Ruby 1.9.3创建的,但是在2.1.2版本中有效。 假设您...
如果误用了`method_missing`,可能会导致程序中的方法调用出现异常,甚至引发安全问题。因此,在可能的情况下,应优先考虑使用`delegate`或`define_method`来实现动态方法调用。 #### 九、捕捉定义良好的方法 在...
2. **方法定义和调用**:Ruby支持多种方法定义方式,如`def`关键字、`define_method`、`method_missing`等。其中,`method_missing`是一个特殊的方法,用于处理未定义的方法调用,是实现动态行为的重要工具。 3. **...
我们建立在 HTTParty 之上,并做了一些method_missing魔法来接受官方 Flickr API 支持的任何方法。 您还可以(可选)使用auth_url和complete_auth方法(见下文)进行经过身份验证的 API 调用。 安装 gem install ...
attributes, :method_missing, :assign_attribute, :read_attribute, :read_new_model, :new_model , :new_array_model, :expand!, :<<, :save!, :promise_for_errors, :buffer, :state,
7. 调用者方法(Method Missing):Ruby提供了一个特殊的叫做 `method_missing` 的方法。当一个对象接收到一个未定义的方法调用时,Ruby会尝试调用 `method_missing`。利用这一点,程序员可以创建出非常有表现力的...
它覆盖[] 、 find_all和method_missing以提供一种简化的 DSL,用于通过查询对象的属性来查找对象。 在查看完整文档。 安装 gem install queryable_array 要求 Ruby 1.9+ 用法 基本¶ ↑ 使用一组对象初始化...