我应该如何使用 alias_method_chain 作为构建方法?

2024-06-20

我正在使用 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 `<class:Comment>'

我应该如何使用alias_method_chain为了build method?或者,也许更好,我应该以另一种方式继续实现我想做的事情(例如,我应该覆盖build方法中的Articles::Comment模型而不是使用alias_method_chain)?


Note I: 不知道有没有用,不过build方法指的是关联(@article.comments)。更多,我不说明build方法中的Articles::Comment模型,因为它应该由 Ruby on Rails 框架本身“添加”/“附加”到类中(我认为它是通过元编程实现的)。

Note II:考虑时会出现同样的错误new方法而不是build;也就是说,当使用alias_method_chain :new, :option_name.


正如您所说,build 是在关联代理上定义的方法。您可以做的是使用关联扩展,因此在模型中您可以将一个块传递给 has_many 调用,该调用将被视为给定 Association_proxy 的扩展:

class Article < ActiveRecord::Base
  ...
  has_many :comments do
    alias_method_chain :build, :option_name
  end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该如何使用 alias_method_chain 作为构建方法? 的相关文章

随机推荐