ruby-on-rails – 没有父级的Rails祖先

我正在使用Ancestry在Rails中构建一个分层类别,我允许用户选择他们正在创建的对象的父级.我使用下拉列表显示现有类别:

<%= 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的配置,还是这个表格验证器可能过度保护?

解决方法

发生这种情况是因为祖先不能为零,因为所有gem的行为都基于此属性,因此手动更改它是个坏主意.对于这种情况,gem有另一个parent_id属性,您应该在表单中使用该属性.

gem’s wiki中有一个很好的解释如何使用祖先构建表单

希望能帮助到你

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...