2016-03-24 44 views
0

我正在对我的Rails应用程序进行验证,验证正在工作。但是,它仍显示成功消息,并且不显示错误消息。我相信我错过了一些简单的东西!这是我的代码。错误消息没有显示在页面上

def create 
    @message = Message.create(message_params) 
    if @message.send_at.blank? 
    Person.in_groups(message_params[:group_ids]).each do |person| 
     person.delay.send_message(@message.body) 
     flash[:success] = "Messages on their way!" 
    end 
    else 
    Person.in_groups(message_params[:group_ids]).each do |person| 
     person.delay(run_at: @message.send_at).send_message(@message.body) 
     flash[:success] = "Messages on their way!" 
    end 
    end 
    redirect_to root_path 
end 

她是我的看法

<% if @message.errors.any? %> 
    <ul> 
    <% @message.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
    <% end %> 
    </ul> 
<% end %> 
+0

...什么错误信息?您发布的代码中没有任何内容。发布你的看法,如果你只是在验证错误后,可能是看看的地方。 – Matt

+0

您的创建方法会重定向创建是否成功。重定向时,会丢失内存中的对象。 @ MTarantini的建议通过渲染来处理保存失败,而不会丢失内存。 – Matt

回答

0

我通常去了解它的方式是:

def create 
    @message = Message.build(message_params) 
    if @message.save 
    run_at_time = @message.send_at.present? ? @message.send_at : Time.zone.now 
    people = Person.in_groups(message_params[:group_ids]) 
    if people.any? 
     people.each do |person| 
     person.delay(run_at: run_at_time).send_message(@message.body) 
     end 
     flash[:success] = 'Messages on their way!' 
     redirect_to_root_path 
    else 
     flash[:danger] = 'No people to send messages to.' 
     render 'new' 
    end 
    else 
    flash[:danger] = 'There was an error with message creation.' 
    render 'new' 
    end 
end 

这样@ message.save将返回true或false,并根据是否它通过验证成功,您可以让它呈现表单或重定向到根。

如果组中没有任何人发送消息,我还添加了一些代码以显示错误。与问题没有直接关系,但我注意到了可能性。

+0

这个工程,但你可以告诉我一种方式没有你犯的错误字符串。我只想让轨道错误消息失去作用。 – Cambass

+0

您在视图中显示错误的方式仍然有效,因为@ message.errors会保留它们。我只是添加闪光灯,在页面顶部(或显示它们的任何位置)向用户显示一条消息,以便他们很快知道发生了错误,并且可以向下滚动以查看导致错误的原因。如果你不想要它们,你可以删除flash [:危险]行,你的错误仍然会显示在视图中。 – MTarantini

相关问题