rails: не удается массово назначить этим защищенным атрибутам при попытке установить тип STI во время создания - PullRequest
0 голосов
/ 17 ноября 2010

Я только начал изучать рельсы и рубины, поэтому, пожалуйста, потерпите меня, если это слишком глупо.

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

Однако при попытке разрешить пользователю явно выбирать, какой тип он хочет в app_modules/new.html.erb, я получаю предупреждение WARNING: Can't mass-assign these protected attributes: type. Вот соответствующий код:

<% form_for(@app_module) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :type %><br />
    <%= f.select( :type, options_from_collection_for_select(AppModule.subclasses().map{ |c| c.name}, 'to_s', 'to_s')) %>
    </p>

  <%= f.submit 'Create' %>
 <% end %>

Я пытался установить экспликацию attr_accessible :type в файле модели, но она не работала

Я использую рельсы 2.3.8 и ruby ​​1.8.7.

Любая помощь с благодарностью, спасибо ...

Ответы [ 3 ]

6 голосов
/ 17 ноября 2010

Вам никогда не придется устанавливать атрибут типа вручную. Вместо этого используйте созданные вами подклассы.

model = params[:app_module].delete(:type).constantize
model = AppModule unless model.is_a?(AppModule)
@app_module = model.new(params[:app_module])
1 голос
/ 17 ноября 2010

Добавьте это в свой базовый класс:

  def attributes_protected_by_default
    super - [self.class.inheritance_column]
  end

Я рекомендую метод Адама, если вы не имеете дело со смешанным списком.

0 голосов
/ 25 мая 2012

Мне просто нужно прокомментировать следующую строку в моем «config / application.rb», чтобы решить эту проблему.

# config.active_record.whitelist_attributes = true
...