ActiveRecord :: DangerousAttributeError - атрибут? определяется ActiveRecord - PullRequest
3 голосов
/ 16 ноября 2011

У меня есть существующая база данных с некоторыми таблицами, использующими имя столбца attribute. Я просто не могу изменить это имя, так как это будет означать перекомпиляцию всего нашего приложения.

При попытке получить доступ к БД я получаю:

attribute? is defined by ActiveRecord

Сначала я попробовал использовать datamapper, но я не могу с этим справиться, и я обнаруживаю, что исправляю вещи, которые не должны быть повреждены, например, вложенные атрибуты ....

Итак, я вернулся к ar и использую это для решения проблем:

class Radcheck < ActiveRecord::Base
  set_table_name 'radcheck'
  class << self
       def instance_method_already_implemented?(method_name)
         return true if method_name == 'attribute?'
         return true if method_name == 'attribute_before_type_cast'
         return true if method_name == 'attribute='
         return true if method_name == 'attribute'
         return true if method_name == 'attribute_changed?'
         return true if method_name == 'attribute_change'
         return true if method_name == 'attribute_will_change!'
         return true if method_name == 'attribute_was'
         return true if method_name == 'attribute_column'
         return true if method_name == 'reset_attribute!'
         super
       end
   end
end

Но это грязно и мешает мне, когда я на самом деле пытаюсь получить доступ к столу ...

Какие у меня есть другие варианты - есть ли хорошие способы обойти этого маленького подонка?

Ответы [ 3 ]

3 голосов
/ 07 декабря 2012

Не беспокоясь о зарезервированных атрибутах ActiveRecord, просто добавьте гем в ваш гемфайл, и он автоматически позаботится о столкновениях имен.

gem 'safe_attributes'

Наслаждайтесь RAILing ..

3 голосов
/ 08 декабря 2012

Не заботясь о том, какие атрибуты зарезервированы ActiveRecord в Rails 3.0, просто добавьте

 gem 'safe_attributes'

в ваш Gemfile, и самоцвет попытается автоматически позаботиться обо всех встречающихся именах.

3 голосов
/ 18 ноября 2011

Я собираюсь ответить на это сам, потому что вышеописанное не исправило полностью.

Несмотря на переименование столбца в моем контроллере:

 @radcheck = Radcheck.find(:all, :select => 'attribute AS attr')

Я все еще не мог использовать атрибут.

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

<% @radcheck.each do |radcheck| %>
<%= radcheck.attr %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...