2015-05-10 21 views
0

我爲我的Devise註冊表單使用formValidation查詢插件。該插件是從formValidation.io。我可以通過表單來註冊有效或無效的條目,但它總是提交一個空白表單。由於某種原因表單顯示已填寫,但我不斷收到錯誤,說明必填字段不能爲空。當我觀察痕跡時,註冊信息被註冊在那裏......但它在線路上的某處丟失。formValidation jquery插件在rails上提交一個空白的設計註冊表格

跟蹤:

Started POST "/users" for ::1 at 2015-05-09 20:11:21 -0700 
source=rack-timeout id=b008bd12bcf5f1f2687f7e216cf42136 timeout=20000ms service=1750ms state=active 
Processing by Users::RegistrationsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"uzEtfaHhjFg5M1aRL6shfpMxA3/Wbf/CVm5R1cU+NDNjrOx2nbnlkfQ9t+SlvKTk2Lm+F1r1rkvLfauEtFKRtA==", "firstname"=>"fred", "lastname"=>"flintstone", "email"=>"[email protected]", "pw1"=>"dino123", "pw2"=>"dino123", "commit"=>"Create Account"} 
    (0.3ms) BEGIN 
    User Exists (0.6ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('') LIMIT 1 
    (0.2ms) ROLLBACK 
    Rendered users/registrations/_form.html.erb (5.9ms) 
    Rendered users/registrations/new.html.erb within layouts/application (43.5ms) 
source=rack-timeout id=b008bd12bcf5f1f2687f7e216cf42136 timeout=20000ms service=2006ms state=active 
    Rendered layouts/_sidebar_signedout.html.erb (0.5ms) 
Completed 200 OK in 237ms (Views: 206.9ms | ActiveRecord: 1.1ms) 
source=rack-timeout id=b008bd12bcf5f1f2687f7e216cf42136 timeout=20000ms service=2108ms state=completed 
source=rack-timeout id=4553e621abb4ef03750d71fd883738df timeout=20000ms state=ready 
source=rack-timeout id=4553e621abb4ef03750d71fd883738df timeout=20000ms service=0ms state=active 

形式

<%= simple_form_for(resource, :as => resource_name, id: 'new_user', :url => registration_path(resource_name)) do |f| %> 

    <% if resource.errors.any? %> 
<%= devise_error_messages! %> 
<% end %> 

<%= f.text_field :firstname, :name=>'firstname', :class => 'form-control', :autofocus => true, :required => true, :placeholder => 'FIRST NAME' %> 

<%= f.text_field :lastname, :name =>'lastname', :class => 'form-control', :autofocus => true, :required => true, :placeholder => 'LAST NAME ' %>   

<%= f.email_field :email, :name=>'email', :class => 'form-control ', :autofocus => true, :required => true, :placeholder => 'YOUR EMAIL', :style=>"width:100%" %> 

    <%= f.password_field :password, :class => 'form-control ', :name=>'pw1', :autofocus => true, :required => true, :placeholder => 'YOUR PASSWORD' %> 
     <%= f.password_field :password_confirmation, :name=>'pw2', :class => 'form-control ', :autofocus => true, :required => true, :placeholder => 'CONFIRM YOUR PASSWORD' %> 

<%= f.submit 'Create Account', :class => 'btn btn-aqua btn-lg btn-block', 
             :style => 'margin-bottom:5px' %> 


<%end%> 


<script> 
$(document).ready(function() { 
    $('#new_user').formValidation({ 
     framework: 'bootstrap', 

     icon: { 
      valid: 'fa fa-check', 
      invalid: 'fa fa-times', 
      validating: 'fa fa-refresh' 
     }, 
     fields: { 
      firstname: { 
       validators: { 
        notEmpty: { 
         message: 'Please enter your first name' 
        } 
       } 
      }, 

      lastname: { 
       validators: { 
        notEmpty: { 
         message: 'Please enter your last name' 
        } 
       } 
      }, 


      email: { 
       validators: { 
        notEmpty: { 
         message: 'The email address is required' 
        }, 
        emailAddress: { 
         message: 'The input is not a valid email address' 
        } 
       } 
      }, 
      pw1: { 
       validators: { 
        notEmpty: { 
         message: 'The password is required' 
        }, 

       } 
      }, 

       pw2: { 
       validators: { 
        notEmpty: { 
         message: 'Please confirm your password' 
        }, 
        identical: { 
         field: 'pw1', 
         message: 'The passwords do not match' 
        } 
       } 
      } 
      button: { 
    // The submit buttons selector 
    selector: '[type="submit"]:not([formnovalidate])', 

    // The disabled class 
    disabled: 'disabled' 
} 

     } 
    }); 
}); 
</script> 

回答

1

您的問題是,你設定的所有表單輸入的name屬性。不要這樣做。

既然你firstnamelastname填滿了,等你PARAMS看起來像

{"firstname"=>"fred", "lastname"=>"flintstone", "email"=>"[email protected]", "pw1"=>"dino123", "pw2"=>"dino123", "commit"=>"Create Account"} 

時,他們應該像

{"user" => {"firstname"=>"fred", "lastname"=>"flintstone", "email"=>"[email protected]", "pw1"=>"dino123", "pw2"=>"dino123" }, "commit"=>"Create Account"} 

Rails會自動填充那些,例如,user[firstname]user[lastname]等,這將使你的params看起來像這樣:user: { firstname: 'blabla', lastname: 'something'}

如果您需要手動設置name,並且您的代碼需要具有屬性的user對象,則需要將其編寫爲name="user[attribute_name]"

+0

這太好了,它現在提交...但它打破了jquery。如果你有時間,我已經發布了一個涉及新破解的Jquery的問題。 http://stackoverflow.com/questions/30154511/formvalidation-jquery-plugin-does-not-read-rails-safe-form-names – NothingToSeeHere