Я строю иерархическую категорию в Rails с использованием Ancestry, и я разрешаю пользователю выбирать родителя объекта, который они создают. Отобразить существующие категории с помощью выпадающего меню:Rails ancestry with nil parent
<%= f.input :ancestry, collection: Category.sorted_list %>
Пока пользователь выбирает существующий узел, все хорошо. Если пользователь выбирает пробел в раскрывающемся списке, я ожидаю, что Ancestry создаст корневой узел, но вместо этого форма выдает ошибку «недействительна».
Мой контроллер ничего не делает mindblowing:
def update
@category = Category.find(params[:id])
respond_to do |format|
if @category.update_attributes(params[:category])
format.html { redirect_to @category, notice: 'Category was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @category.errors, status: :unprocessable_entity }
end
end
end
Я новее в Rails, так что я не знаю, как атаковать эту проблему. Есть ли какая-то конфигурация для Происхождения, которую я пропустил, или, возможно, это проверка подлинности формы?
Так что, может быть, я просто не понимаю, как правильно настроить модель категории. Если я добавлю: parent_id выберите в мою форму, я получаю сообщение «Can not mass-assign protected attributes: parent_id» от контроллера. Должен ли я иметь как родословную, так и родительский столбец? –
Вам не нужно иметь 'parent_id' в вашей базе данных, просто столбце' ancestry'. Но вам нужно поставить 'parent_id' на' attr_accessible', чтобы избежать ошибки массового присвоения –
Это сделало это, спасибо! –