Rails表单验证在提交之前显示在页面加载上

时间:2012-12-21 00:26:24

标签: ruby-on-rails ruby ruby-on-rails-3

好吧,我必须错过一些简单的事情。

我正在使用部分“/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 %>

1 个答案:

答案 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