我正在使用 Ruby on Rails 3.2.13,因为在我之前的问题“我应该如何使用 alias_method_chain 作为构建方法?” 似乎找到了任何解决方案,我正在考虑build
在我的模型类中覆盖该方法以获得所需的行为。
我如何/应该覆盖build
我的模型的方法(即使该build
方法为ActiveRecord
关联运行时@article.comments.build(...)
)?
我正在使用 Ruby on Rails 3.2.13,因为在我之前的问题“我应该如何使用 alias_method_chain 作为构建方法?” 似乎找到了任何解决方案,我正在考虑build
在我的模型类中覆盖该方法以获得所需的行为。
我如何/应该覆盖build
我的模型的方法(即使该build
方法为ActiveRecord
关联运行时@article.comments.build(...)
)?
有一种方法可以自定义您的构建方法,定义您build
的模型关系:
class Article
has_many :comments do
def build(*args, &block)
#TODO your code
super(*args, &block)
end
end
end
如果您不需要构建方法的默认参数,那么您可以使用自己的。
build
是ActiveRecord::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