0

多亏了 Rails 2.3 的新特性,我构建了一个类似引擎的插件。它是 CMS 的“产品”模块,是从先前存在的(和工作的)模型/控制器中推断出来的。该插件依赖于 easy_fckeditor 和 globalize (描述和标题字段是本地化的),我怀疑 globalized 可能是这里的罪魁祸首......一切正常,除了更新操作。我收到以下错误消息:(仅发布第一行,所有消息都是关于 attribute_methods)

stack level too deep

/Library/Ruby/Gems/1.8/gems/activerecord-2.3.2/lib/active_record/attribute_methods.rb:64:in `generated_methods?'
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.2/lib/active_record/attribute_methods.rb:241:in `method_missing'
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.2/lib/active_record/attribute_methods.rb:249:in `method_missing'

对于参考,完整的错误堆栈在这里:http ://pastie.org/596546

我试图调试消除所有输入字段,一个接一个,但我不断收到错误。fckeditor 似乎不是罪魁祸首(即使没有 fckeditor 也会出错)

这是动作:

def update
  params[:product][:term_ids]  ||= [] 
  @product = Product.find(params[:id])
  respond_to do |format|
    if @product.update_attributes(params[:product]) 
    flash[:notice] = t(:Product_was_successfully_updated)
      format.html { redirect_to products_path }
      format.xml  { head :ok } 

    else    
      format.html { render :action => "edit" }
      format.xml  { render :xml => @product.errors, :status => :unprocessable_entity }
    end
  end
end  

如您所见,它非常简单。

4

1 回答 1

0

查看method_missing,很有可能两个method_missing定义在两个不同的类中,导致死循环。解决这个添加

unless method_defined?

例如

alias_method :orig_method_missing, :method_missing 
              unless method_defined? :orig_method_missing
于 2009-08-27T13:57:08.327 回答