2012-12-21 94 views
0

好吧,我必须错过简单的东西。Rails表单验证在提交之前出现在页面加载之前

我使用的部分“/shared/_error_messages.html.erb”来处理

<%= render 'shared/error_messages', object: f.object %>

在我的形式

(一个用于添加程序,一个用于添加数据)。

当我导航到任何表单(/ programs/new和metrics/new)时,页面加载时显示验证。

的programs_controller和metrics_controller在结构上相同(交换@metrics为@programs在metrics_controller):

#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

我没有看到你的代码任何可能阻止'error_messages'从显示出来的部分? – oldergod

+0

我认为在提交被推送之前不会有Object.errors? – Chiperific

+0

但是,那么检查那里的代码是否存在错误?你有'<%if object.errors.any? %>'在错误部分的顶部? – oldergod

回答

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 
+1

是的,他正试图保存每个'新'动作的记录,验证运行并引发错误。 –

+0

我是一个小菜鸟。我一直在想这一切都是错的! – Chiperific