2016-03-24 71 views
0

私は自分のレールアプリの検証を行っており、検証が機能しています。ただし、成功メッセージが表示され、エラーメッセージは表示されません。私は何かが簡単でないことを確信しています!ここに私のコードです。エラーメッセージがページに表示されない

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

です:message.saveはtrueまたはfalseを返す、とするかどうかに依存します@

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 

その方法フォームをレンダリングするか、ルートにリダイレクトするかの検証によって成功します。

また、メッセージを送信するグループに人がいない場合は、エラーを表示するコードを少し追加しました。疑問に直接関係はありませんが、私はその可能性に気付きました。

+0

これはうまくいきますが、あなたが作ったエラー文字列を使わずに私に道を見せることができます。私は、レールのエラーメッセージを表示させたいだけです。 – Cambass

+0

@ message.errorsがそれらを保持するため、ビュー内のエラーを表示する方法は引き続き動作します。私はちょうどエラーが発生したことをすぐに知るように、ユーザーにフラッシュを追加してページの上部(または表示しているどこにでも)にメッセージを表示し、何がエラーを出したかを見るためにスクロールダウンできます。それらを必要としない場合は、単にflash [:danger]行を削除すればエラーは表示されます。 – MTarantini

関連する問題