好吧,我必须错过一些简单的事情。
我正在使用部分“/shared/_error_messages.html.erb”来处理
<%= render 'shared/error_messages', object: f.object %>
在我的表单中(一个用于添加程序,一个用于添加指标)。
当我导航到任何表单(/ programs / new和metrics / new)时,页面加载时会显示验证。
programs_controller和metrics_controller在结构上是相同的(在metrics_controller中交换@programs的@metrics):
#programs_controller.rb
def new
@programs = Program.new(params[:name])
if @programs.save
flash[:success] = "Program saved"
redirect_to "/program"
else
render 'new'
end
end
任何可能导致此问题的想法?
这是部分:
<% if object.errors.any? %>
<div id="error_explanation">
<div class="alert alert-error">
The form contains <%= pluralize(object.errors.count, "error") %>.
</div>
<ul>
<% object.errors.full_messages.each do |msg| %>
<li>* <%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
答案 0 :(得分:3)
我不知道错误是什么,但问题是您在new
操作中保存了对象。保存会生成对象错误;这就是你看到它们的原因。
以RESTful
方式,新操作应该只是实例化模型并将对象传递给表单。表单会将其提交给create
操作;你应该在哪里保存你的对象并检查错误
类似的东西:
#programs_controller.rb
def new
@programs = Program.new
end
def create
@programs = Program.new(params[:program])
if @programs.save
# success
else
# failure
end
end