Родословная родословной с нулевым родителем
Я строю иерархическую категорию в Rails, используя Ancestry, и я позволяю пользователю выбирать родителя объекта, который они создают. Я отображаю существующие категории, используя выпадающий список:
<%= f.input :ancestry, collection: Category.sorted_list %>
Пока пользователь выбирает существующий узел, все хорошо. Если пользователь выберет пробел в раскрывающемся списке, я ожидаю, что Ancestry создаст корневой узел, но вместо этого форма выдаст ошибку "неверно".
Мой контроллер не делает ничего удивительного:
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, поэтому я не знаю, как решить эту проблему. Есть ли какая-то конфигурация для Ancestry, которую я пропустил, или это средство проверки формы, возможно, чрезмерно защищает?
2 ответа
Это происходит потому, что ancestry
не может быть nil
и это плохая идея, чтобы изменить его вручную, потому что все поведение драгоценного камня основано на этом атрибуте. Для таких случаев драгоценный камень имеет другой parent_id
атрибут, который вы должны использовать в своей форме.
В вики gem есть хорошее объяснение , как создавать формы, используя ancestry
Надеюсь, поможет
Родословная проверяет его поле следующим образом:
# Validate format of ancestry column value
validates_format_of ancestry_column, :with => Ancestry::ANCESTRY_PATTERN, :allow_nil => true
Но вы не можете пройти nil
значение в формах. Итак, я сделал это:
before_validation do
self.ancestry = nil if self.ancestry.blank?
end