我将我的应用程序从Rails 4.2转移到5.2,在此过渡过程中,我偶然发现了一个不确定的错误,我不确定该如何解决。这段代码是为我编写的,因为当时我不知道要完成它。我的桌子是为人而设的,桌子上有老板和非老板,那些非老板必须能够与老板保持联系。
在新开发区中,当我提交要更新“ Boss”必须为null
的人的表单时,将得到以下信息:
1 error prohibited this person from being saved: Boss must exist
控制器:
def edit
@person = Person.find(params[:id])
end
型号:
belongs_to :boss, class_name: 'Person'
has_many :subordinates, class_name: 'Person', foreign_key: 'boss_id'
validates_presence_of :user_name, :position, :fname, :lname
模式:
t.integer "boss_id"
t.index ["boss_id"], name: "index_people_on_boss_id"
表格:
<% if @person.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@person.errors.count, "error") %> prohibited this person from being saved:</h2>
<ul>
<% @person.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<fieldset>
...many fields...
</fieldset>
<fieldset>
<label>
Boss
<%= f.select :boss_id, [[" ", :null], [name, 1], [name, 2], ...etc ] %>
</label>
</fieldset>
<%= f.submit %>
<% end %>
我不确定在哪里可以找到答案。
答案 0 :(得分:2)
属于,要求在创建时默认存在父对象。如果您将创建一个没有父对象的子对象,则会收到[“必须存在”]错误消息,因此您的对象无效。
如果您想要这种行为,则需要通过以下选项:
#person.rb
belongs_to :boss, class_name: 'Person', optional: true