#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-3.1
#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-3.1
Вопрос:
У меня есть вложенная форма categories
для stores
, и она указана как attr_accessible в модели хранилища. Но все равно продолжаю получать следующую ошибку:
WARNING: Can't mass-assign protected attributes: category_ids
Я перепробовал все варианты attr_accessible в модели хранилища:
attr_accessible :categories
attr_accessible :category
attr_accessible :category_id
attr_accessible :category_ids
Ни один из них не работает! Обе эти модели являются has_and_belongs_to_many (и имеют объединяющую таблицу под названием categories_stores).
Любой совет был бы с благодарностью принят (я два дня бился головой об стену из-за этого).
Обновить
Я внедрил временное исправление (которое довольно избыточно и не нужно, если rails просто придерживался вышеуказанной проблемы). Я исправил это, перезаписав create
метод для ActiveAdmin и выполнив цикл для вставки данных ассоциации:
controller do
def update
@store = store.find(params[:id])
if @store.update_attributes(params[:store])
@store.categories.delete_all
params[:store][:category_ids].each do |category_id|
@store.categories << Category.find(category_id) unless category_id.blank?
end
redirect_to :action => :index
else
redirect_to :action => :edit, :notice => "Something f'ed up"
end
end
end
Комментарии:
1. Я даже пытался удалить attr_accessible для обеих моделей и все еще безуспешно!
Ответ №1:
Я полагаю, что если у вас есть объединяющая таблица под названием categories_stores, то ваши назначения будут больше похожи на:
class Store
has_many :categories, :through => :categories_stores
с аналогичной настройкой в модели категорий.
В вашей форме, скажем, если вы создаете хранилище и хотите создать / добавить категории для этого хранилища, тогда вам также может потребоваться добавить:
accepts_nested_attributes_for :categories_stores
чтобы иметь возможность добавлять в эту таблицу.
Вы можете прочитать больше о вложенных атрибутах здесь: http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
Комментарии:
1. У меня тоже была такая же проблема, и единственное решение, которое я смог найти, — это то, что предложила Стефани. Например. переключитесь на has_many: through и управляйте вложенным атрибутом CRUD для ассоциации join (store_categories), а не для ассоциации categories.