2

HAML でフォームをレンダリングできますが、それを検証する方法がわかりません。

これが私がこれまでに持っているものです:

  #disclosure-form-container
    = form_for([:mobile,@disclosure], :html => {:id => "disclosure-form", :remote => true}) do |f|
      %p
        =f.label :display_as, (t :select_disclosure_type)
        =f.select :display_as, options_from_collection_for_select(Disclosure.basics, :display_as, :name, f.object.display_as)
      %p
        =f.label :notes, (t :notes)
        =f.text_area :notes, :class => "#{validation_rules(:free_disclosure_notes)}", :rows => 5 , :id => "disclosure_notes_entry"
        = buttonset({:submit_label => (t "buttons.influencers.disclosures.create"),:submit_css_class => "call-to-action",:cancel_url => "#",:direction => :left_to_right})

これにより、2 つのフィールドと [送信] をクリックするボタンを含むフォームがレンダリングされます。しかし、人々があまり何もせずに単に提出した場合はどうなるでしょうか? 検証コードをどこに配置し、このフォームを検証するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

2

モデルでは、Disclosure次のものが必要です。

class Disclosure < ActiveRecord::Base
  validates_presence_of :display_as, :notes
  ...
end

次に、フォームの上部に次のようなエラーメッセージを含めることができます。

- if @disclosure.errors.any?
  %ul.errors
    - @disclosure.errors.full_messages.each do |msg|
      %li= msg

または、シンプルフォームを使用すると、自動検証メッセージがインラインで表示され、フォームは次のようになります。

= simple_form_for @disclosure do |f|
  = f.input :display_as
  = f.input :notes
  = f.submit

これで完了です。

Jdoeが指摘したように、HAMLは検証の検出とは関係がなく、サーバーが指示した内容のみを表示することに注意してください。サーバーは、検証エラーがあるかどうかを判断するものです。

このクライアント側のようなものに相当するものを考え出したい場合は、フォームにIDを指定して、次のようにすることができます(CoffeeScriptで)。

jQuery ->
  $('form#disclosures').submit (event) ->
    unless $('input#display_as').val().length > 0 && $('input#notes').val().length > 0
      event.preventDefault()
      $(this).append('<div class="error">You must select 'display' and enter notes.</div>')
于 2012-04-20T23:22:32.197 に答える
2

ユーザーは、モデルに保存してから DB に保存する必要があるデータを入力します。したがって、モデルレベルで検証を実装するのは当然です。Rails を使用すると、モデルの検証を簡単に作成できます。ここでそれについて読むことができます。簡単に言うと、モデルに数行を追加することで、矛盾したデータでモデルが保存されるのを防ぐことができます。

ただし、モデル レベルの検証に加えて、クライアント側の検証を使用することもできます。つまり、サーバーに送信する前にデータがチェックされます。このようにして、ユーザーはフォームを送信して必須フィールドへの入力を忘れたことに気付く必要がありません。しかし、もちろん、簡単に回避できるため、これを保証することはできません。ここでは、クライアント側の検証について詳しく説明します。

ご覧のとおり、Haml は検証を支援することはできません。これは素晴らしいツールですが、この目的のためではありません。

于 2012-04-20T20:21:45.950 に答える