3

我正在使用 Ruby on Rails 3.2.13,因为在我之前的问题“我应该如何使用 alias_method_chain 作为构建方法?” 似乎找到了任何解决方案,我正在考虑build在我的模型类中覆盖该方法以获得所需的行为。

我如何/应该覆盖build我的模型的方法(即使该build方法为ActiveRecord关联运行时@article.comments.build(...))?

4

2 回答 2

7

有一种方法可以自定义您的构建方法,定义您build的模型关系:

class Article
    has_many :comments do 
        def build(*args, &block)
            #TODO your code

            super(*args, &block)
        end
    end
end

如果您不需要构建方法的默认参数,那么您可以使用自己的。

于 2013-08-12T06:03:59.053 回答
1

buildActiveRecord::Relation类中 new 的别名。源代码中有这一行来制作别名:

alias build new

以下是如何覆盖该build方法:

# config/initializers/monkey_patch.rb
class ActiveRecord::Relation
  def build
    "HHHHHIIIII"
  end
end

如果build在对象上调用该方法ActiveRecord::Relation,则返回字符串“HHHHHIIIIII”。例如,如果是 Coursehas_many学生,此行将返回“HHHHHIIIIII” rails console

Course.first.students.scoped.build

以下是如何向 ActiveRecord::Relation 类添加方法:

# config/initializers/monkey_patch.rb
class ActiveRecord::Relation
  def my_model_build
    "Happy happy, joy joy"
  end
end
于 2013-08-11T15:03:55.930 回答