Ошибка «Слишком глубокий уровень стека» в плагине, похожем на движок, с глобализацией

Я создал плагин, похожий на движок, благодаря новым функциям Rails 2.3. Это модуль «Продукт» для CMS, экстраполированный из ранее существующей (и работающей) модели/контроллера. Плагин использует easy_fckeditor и globalize (поле описания и заголовка локализованы), и я подозреваю, что виноват здесь globalized... Все работает нормально, за исключением действия update. Я получаю следующее сообщение об ошибке: (отправляю только первые строки, все сообщение касается 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  

Как видите, это довольно просто.


person nutsmuggler    schedule 27.08.2009    source источник


Ответы (1)


Посмотрите на method_missing, вполне возможно, что два method_missing определены в двух разных классах и вызывают бесконечный цикл. чтобы решить эту добавить

unless method_defined?

e.g.

alias_method :orig_method_missing, :method_missing 
              unless method_defined? :orig_method_missing
person ez.    schedule 27.08.2009