我应该如何将alias_method_chain用于构建方法?
我正在使用Ruby on Rails 3.2.13,我想正确使用alias_method_chain :build, :option_name
语句,因为我收到一个奇怪的错误。 那是, …
…在我的控制器文件中我有:
class Articles::CommentsController < ApplicationController def create @articles_comment = @article.comments.build(params[:comment]) ... end end
…在我的模型文件中我有:
class Articles::Comment < ActiveRecord::Base def self.build_with_option_name ... end alias_method_chain :build, :option_name end
当我运行create
控制器操作时,我在日志中收到以下错误:
ActionController::RoutingError (undefined method `build' for class `Articles::Comment'): app/models/articles/comment.rb:5:in `'
我应该如何将alias_method_chain
用于build
方法? 或者,也许更好,我应该以另一种方式来达到我想要做的事情(例如,我应该覆盖Articles::Comment
模型中的build
方法而不是使用alias_method_chain
)吗?
注意I :我不知道它是否有帮助,但build
方法是指一个关联( @article.comments
)。 更多,我没有在Articles::Comment
模型中声明build
方法,因为它应该由Ruby on Rails框架本身“添加”/“附加”到类(我认为它是通过元编程实现的)。
注2 :考虑new
方法而不是build
时会出现同样的错误; 也就是说,当使用alias_method_chain :new, :option_name
。
正如您所说,构建是在关联代理上定义的方法。 您可以做的是使用关联扩展,因此在模型中您可以将块传递给has_many调用,该调用将被视为给定association_proxy的扩展:
class Article < ActiveRecord::Base ... has_many :comments do alias_method_chain :build, :option_name end