1

これが私のフォームです:

= simple_form_for [@post, @comment] do |f| 
  = f.input :text, :label => false
  = f.button :submit

コメントは Posts リソース内にネストされます。コメントの検証:validates :text, :length => { :minimum => 5 }

コメント コントローラー:

def create
  @post = Post.find params[:game_id]
  comment = @post.comments.build :user_id => current_user, :text => params[:comment][:text]

  comment.save
  redirect_to @post
end

フォーム自体は正常に動作します。5 文字以上入力すると、コメントが作成されます。しかし、それが少ない場合は、リダイレクトされるだけposts#showで、フォームに検証エラーはありません (ソースを確認しました)。

また、デバイス登録フォームに記入してみましたが、失敗した場合はエラーが表示されます。

問題はリダイレクトが原因だと思います。しかし、とにかく、私はそれを修正する方法がわかりません。

4

1 に答える 1

5

ユーザーをリダイレクトすると、アプリケーションが何らかの方法でエラーを記憶しない限り、エラーは失われます。この問題を解決するには、次の 2 つの方法があります。

  1. ユーザーをリダイレクトせずにrender、ビューをエラー メッセージと共に表示するために使用します。たとえば、それがDeviseの機能です。

  2. ユーザーをリダイレクトしますが、何らかの方法でエラー メッセージに沿って転送します。これを行うには多くの方法があります。たとえば、単純な文字列として、またはシリアル化された形式でフラッシュに保存します。ただし、これは通常、より複雑であり、リダイレクトが必要な場合にのみ実行する必要があります。

于 2011-08-02T15:03:50.830 に答える