2010-08-12 2 views
0

В проекте Rail 3 У меня есть сценарий:Rails 3.0.0rc - ActiveRecord :: Base.class_name

<%= javascript_tag do -%> 
    var columns = new Array(); 
    <% for table in @tables -%> 
    <% for column in ActiveRecord::Base.const_get(ActiveRecord::Base.class_name(table)).columns -%> 
     columns.push(new Array('<%= table %>', '<%= column.name %>')); 
    <% end -%> 
    <% end -%> 
    function mergeTableSelected() { 
    var o = $('select#merge_table option:selected'); 
    $('th select option').remove(); 
    $('th select').each(function(i, select) { 
     select.options.add(new Option()); 
     $.each(columns, function(j, column) { 
     if (o.text() == column[0]) { 
      select.options.add(new Option(column[1])); 
     } 
     }); 
    }); 
    } 
<% end -%> 

После обновления от 3.0.0.beta4 до 3.0.0.rc я получаю:

undefined method `class_name' for ActiveRecord::Base:Class 

Что теперь делать?

ответ

2

Я решена проблема с:

... 
<% klass = table.to_s.classify %> 
<% for column in ActiveRecord::Base.const_get("#{klass}").columns %> 
... 
1

Они сняли его с Rails 3RC:
http://github.com/rails/rails/commit/735a4db6854e73e871e6b01ec003f0670cc5ee14

Не знаю, почему, но вы, вероятно, можете просто использовать другой подход в представлении .. это выглядит, как вы тянете все таблицы в проекте, так вы можете превратить строку в константу и вызовите .columns на этой константы:

<% @tables.each do |table| %> 
    <% table.classify.constantize.columns.each do |column| %> 
     columns.push(new Array('<%= table %>', '<%= column.name %>')); 
    <% end %> 
    <% end %> 
+0

I обновление d мое решение с другим методом, который может работать (в зависимости от того, что @tables), без использования методов ActiveRecord :: Base – johnmcaliley