gpt4 book ai didi

ruby-on-rails - 我应该如何将 alias_method_chain 用于构建方法?

转载 作者:太空宇宙 更新时间:2023-11-03 16:04:07 24 4
gpt4 key购买 nike

我正在使用 Ruby on Rails 3.2.13,我想正确使用 alias_method_chain :build, :option_name 语句,因为我遇到了一个奇怪的错误。也就是说,...

...在我的 Controller 文件中我有:

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 Controller 操作时,我在日志中收到以下错误:

ActionController::RoutingError (undefined method `build' for class `Articles::Comment'):
app/models/articles/comment.rb:5:in `<class:Comment>'

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


注意我:我不知道它是否有帮助,但是build方法指的是一个关联(@article.comments) .此外,我没有在 Articles::Comment 模型中说明 build 方法,因为它应该由 Ruby on Rails 框架“添加”/“附加”到类本身(我认为它是通过元编程制作的)。

注意事项二:在考虑new方法而不是build时会出现同样的错误;也就是说,当使用 alias_method_chain :new, :option_name 时。

最佳答案

正如你所说,build是一个定义在association proxy上的方法。您可以做的是使用关联扩展,因此在模型中您可以将一个 block 传递给 has_many 调用,这将被视为给定 association_proxy 的扩展:

class Article < ActiveRecord::Base
...
has_many :comments do
alias_method_chain :build, :option_name
end

关于ruby-on-rails - 我应该如何将 alias_method_chain 用于构建方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18163004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com