2015-11-08 2 views
2

Я пытаюсь создать новую регистрационную форму пользователя и по какой-то причине, когда я отправляю форму, она просто мигает на экране, и информация не попадает в db. Я почти уверен, что он никогда не попадает в действие create, поскольку я поместил binding.pry в первую строку метода create, и сервер никогда не останавливается на нем. Он также обновляет URL-адрес: http://localhost:3000/register?utf8=%E2%9C%93&authenticity_token=z%2FZxe...rails form_for не отправляет для создания действия

Я предполагаю, что у меня что-то не хватает, но не смог понять его после нескольких часов исследований и рефакторинга. Вот мой код:

модель:

class User < ActiveRecord::Base 
    has_secure_password validations: false 
    validates :username, presence: true, uniqueness: true 
    validates :email, presence: true 
    validates :password, presence: true, on: :create, length: {minimum: 7} 
end 

контроллер:

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_params) 

    if @user.save 
     session[:user_id] = @user.id 
     flash[:notice] = "You have successfully registered." 
     redirect_to root_path 
    else 
     render :new 
    end 
    end 

    private 

    def user_params 
    params.require(:user).permit(:username, :email, :password) 
    end 
end 

вид:

<%= render 'shared/title', title: 'New User Registration:' %> 

<div class='col-lg-6'> 
    <div class='well bs-component'> 
    <form class='form-horizontal'> 
     <legend>Enter New User Details</legend> 
     <hr/> 
     <%= form_for @user do |f| %> 
     <%= render 'shared/error', obj: @user %> 
     <div class='form-group'> 
      <%= f.label :username, class: 'col-lg-2 control-label' %> 
      <div class='col-lg-10'> 
      <%= f.text_field :username, class: 'form-control empty', placeholder: 'Username' %> 
      </div> 
     </div> 
     <div class='form-group'> 
      <%= f.label :email, class: 'col-lg-2 control-label' %> 
      <div class='col-lg-10'> 
      <%= f.email_field :email, class: 'form-control empty', placeholder: 'Email' %> 
      </div> 
     </div> 
     <div class='form-group'> 
      <%= f.label :password, class: 'col-lg-2 control-label' %> 
      <div class='col-lg-10'> 
      <%= f.password_field :password, class: 'form-control empty', placeholder: 'Password' %> 
      </div> 
     </div> 
     <%= f.submit @user.new_record? ? "Register" : "Update Profile", class: 'btn btn-primary btn-sm' %> 
     <% end %> 
    </div> 
    </div> 
</div> 

маршруты:

get '/register', to: 'users#new' 
resources :users, only: [:show, :create, :edit, :update] 

Я использую рельсы v.4.2.4 и ruby ​​v.2.1.6. Любая обратная связь будет принята с благодарностью! Благодарю.

UPDATE:

Вот частичная ошибка оказывается в виде одного запроса Michal по:

<% if obj.errors.any? %> 
    <div class="row"> 
    <div class="alert alert-dismissable alert-danger"> 
    <button type="button" class="close" data-dismiss="alert">×</button> 
     <h5>Oh Snap! The following errors occured:</h5> 
     <% obj.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
    </div> 
    </div> 
<% end %> 
+0

Можете ли вы вставить код для визуализированной формы? –

+0

Полагаю, вы не используете Devise для регистрации? –

+0

SunnyK - нет, я просто использую испеченные функции через bcrypt v.3.1.7 и 'has_secure_password' – jsonkenl

ответ

1

Guarav Gupta был прав в комментариях. Как только я сменил тег 'form' на тег 'div' в представлении, он работал, как ожидалось.

0

Похоже, у вас есть ошибка маршрутизации.

изменение get '/register', to: 'users#new' в get '/register, to: 'users#create''

Это позволит сэкономить пользователю БД.

Смежные вопросы