1

私の問題は次のとおりです。

送信後に成功アイコンと失敗アイコンを表示する必要があるフォーム ビューがあります。送信する前に、成功アイコンと失敗アイコンなしでフォームを表示する必要があります。

これが次の形式の場合、いくつかの方法でこれを行うことができます。

<%= form_for @resource do |f| %>
    <div class='<%= set_class @resource, :name %>'>
        Name: <%= f.text_field :name %>
    </div>
<% end %>

リクエストが POST かどうかを確認します。

    def set_class( record, attribute )
        if request.post?
            if record.errors[attribute].any?
                return "FAILED"
            else
                return "SUCCESS"
            end
        end
        # If not submitted, we don't want a class
    end

request.post?検証後にフラグを設定します (上記のソリューションを に置き換えることができますrecord.tried_to_validate):

    class MyModel < ActiveRecord::Base

        after_validation :set_tried_to_validate

        attr_accessor :validated

        def set_validated
            @tried_to_validate = true
        end

    end

しかし、私はこれらのソリューションがあまり好きではありません..

検証プロセスが完了したかどうかを確認する内部 Rails メソッドはありませんか?

4

2 に答える 2

4

最初に有効性をテストできます。

@form.valid?

@フォームの「エラー」に保存されたエラーが生成されます。特定のフィールドにエラーがあるかどうかを確認するには、

@form.errors[:some_field] 

フォームでは、次のことを簡単に実行できます。

<% if @form.errors[:some_field].empty? %>
  Valid
<% end %>

一部のフィールドでエラーが発生する限り、フォーム全体が !valid? になるため、フォームを再度表示する状態に戻り (:new)、「有効」またはチェックマークを付けることができます。

于 2012-07-09T14:14:00.897 に答える
0

検証をフォームにインラインで表示したい場合は、クライアント側の検証のようなものを探していると思います。http://railscasts.com/episodes/263-client-side-validations

編集

3つのステージをキャプチャしたい場合は、データベースに保存できます。新規、検証、完了、コールバックを使用して各ステージを保存し、デフォルトを新規に設定します。(検証された属性のデータ型を文字列に変更する必要があります)

after_validation 属性を「validate」に更新

after_save 属性を「Finished」に更新

次に、if elsif else 条件を使用して、その属性の値をチェックし、ティックとクロスをレンダリングできます。明らかに、これはきれいではなく、valid? を使用する必要があります。そしてエラー?ヘルパー。

于 2012-07-09T14:45:17.967 に答える