ruby-on-rails - Ruby on Rails 中的 block 调用

标签 ruby-on-rails ruby

我正在尝试清理我的代码并摆脱大量丑陋的哈希值。在我看来,我定义了几个这样的 Action :

@actions = {
  :interest => {'Show interest', link_to(..), :disabled => true},
  :follow   => {'Follow this case', link_to(..)}
  ...
}

随着这些哈希值的增长,可维护性会降低。我想将上面的格式转换成类似的格式:

actions do
   item :interest, 'Show interest', link_to(..), :disabled => true
   item :follow,   'Follow',        link_to(..)
   ...
end

我如何构造我的辅助方法以允许这样做?最好 'item'-method 应该只在 'actions' block 中可用,而不是在全局范围内可用。

谢谢!

最佳答案

我认为这种技术称为“无尘室”,其中您有一个匿名对象,其中包含您要调用的方法,以便该方法只能在您的 block 内使用:

def actions(&block)
  cleanroom = Class.new{
    def item(*args)
      puts "these args were passed in: #{args.inspect}"
    end
  }
  cr = cleanroom.new
  cr.instance_eval &block
end

当然这个“item”方法只是放一些文本,但你可以做任何你需要的。

actions do
  item "foo", "bar", "baz"
end  #=> these args were passed in: ["foo", "bar", "baz"]

关于ruby-on-rails - Ruby on Rails 中的 block 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3052489/

相关文章:

ruby-on-rails - 使用 amazon s3 使用回形针调整图像大小

ruby-on-rails - Rails where 条件为零值

ruby-on-rails - Heroku PostGres 数据库测试配置

ruby-on-rails - 用于 Ruby on Rails 开发的 Linux 支持的 IDE

ruby - 获取共享数组空间的memsize

ruby-on-rails - Rails 方法在没有 session 的情况下限制页面访问

ruby-on-rails - 我可以在 RSpec 测试中实现依赖注入(inject)吗?

ruby-on-rails - 将 Rails 多态性用于嵌套注释

ruby-on-rails - 在 Ruby 或 Rails 中,为什么 "include"有时在类内有时在类外?

ruby-on-rails - ArgumentError : When assigning attributes, 你必须传递一个散列作为参数