ruby-on-rails - Rails - 带有 'attribute=' 方法的 alias_method_chain

标签 ruby-on-rails alias-method-chain

我想通过模块在模型的方法上“添加”一些代码,当它被包含时。我想我应该使用 alias_method_chain,但我不知道如何使用它,因为我的“别名方法”是以“=”符号结尾的方法之一:

class MyModel < ActiveRecord::Base

  def foo=(value)
    ... do stuff with value
  end

end

这就是我的模块现在的样子:

module MyModule
  def self.included(base)
    base.send(:include, InstanceMethods)
    base.class_eval do

      alias_method_chain 'foo=', :bar

    end
  end

  module InstanceMethods
    def foo=_with_bar(value) # ERROR HERE
      ... do more stuff with value
    end
  end
end

我在函数定义上遇到错误。如何解决这个问题?

最佳答案

alias_method_chain 是一个简单的两行方法:

def alias_method_chain( target, feature )
  alias_method "#{target}_without_#{feature}", target
  alias_method target, "#{target}_with_#{feature}"
end

我想你想要的答案是在这种情况下简单地让两个 alias_method 调用你自己:

alias_method :foo_without_bar=, :foo=
alias_method :foo=, :foo_with_bar=

你会像这样定义你的方法:

def foo_with_bar=(value)
  ...
end

Ruby 符号可以毫无问题地处理方法名称的尾随 =?

关于ruby-on-rails - Rails - 带有 'attribute=' 方法的 alias_method_chain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2103457/

相关文章:

ruby-on-rails - 保存后检查嵌套属性是否改变

ruby-on-rails - 如何修改 Rails 3 表单生成器

ruby-on-rails - 在开发模式下在 Ruby on Rails 上使用 alias_method_chain 自定义 Helper [REDMINE]

ruby-on-rails - alias_attribute 和使用原始属性名称创建方法会导致循环

javascript - 加载选项列表一次并将其渲染到客户端的多个选择框?

ruby-on-rails - 如何在 Rails 上查找数据库迁移日志?

ruby-on-rails - Rails 教程 3.2 没有 growl 通知

ruby-on-rails - 即使在捆绑安装后也无法使用 gem