2

「アカウントの作成」ページをセットアップしたいと考えています。私が使用している宝石は次のとおりです。

  • レール (3.2.3)
  • simple_form (2.0.1)
  • 全認証アイデンティティ
  • ツイッター-ブートストラップ-レール (2.0.6)
  • モンゴイド(2.2.3)

フォームは次のようになります。

= simple_form_for @identity, :url => '/auth/identity/register', :html => { :class =>    'form-horizontal' } do |f| 
  = f.input :name, :input_html => {:name => 'name'}
  = f.input :email, :input_html => {:name => 'email'}
  = f.input :password, :as => 'password', :input_html => {:name => 'password'} 
  = f.input :password_confirmation, :label => "Confirm Password", :as => 'password', :input_html => {:name => 'password_confirmation'} 
  .form-actions
    = f.button :submit, 'Sign Up', class: 'btn-primary'
    = link_to 'Cancel', root_path,  class: 'btn-danger'

対応するアイデンティティモデルは

class Identity
  include Mongoid::Document
  include OmniAuth::Identity::Models::Mongoid
  field :name, :type => String
  field :email, :type => String
  field :password_digest, :type => String

  validates_presence_of :name, :email
  validates_uniqueness_of :email
  validates_format_of :email, :with => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i
end

フォームのテキスト フィールドに何も入力せずに [サインアップ] をクリックすると、バリデータからのエラー メッセージがフォームに表示されず、代わりにホームページにリダイレクトされます。

明らかな何かが欠けていますか、それとも私が使用しているgemバージョンに問題があるのでしょうか? もちろん、twitter-bootstrap マークアップを使用して simple_form なしで同じフォームを実装することもできますが、この方法をお勧めします。

4

2 に答える 2

1

simple_formが別のモデルのフィールドを検証しますが、ユーザーモデルでは検証しない同様の状況にあります。

いずれにせよ、私はあなたが持っていないことに気づきました:

validates_presence_of :password

あなたのモデルで。たぶん、mongoidはそのステップを実行することからあなたを救いますか?mongoidはわかりませんが、私にとっては、フィールドが空白でないことを検証する魔法です。私のために働いている分野のために私はこれを持っています:

validates_presence_of :title, :localeLanguage, :message => "can't be blank"
于 2012-04-30T13:22:36.273 に答える
1

私はこの問題を抱えていました。これをすべての単純なフォームに含めることで修正しました。その後、正しくレンダリングされることがわかりました。

<%= f.error_notification %>
于 2012-06-22T10:57:51.810 に答える