2013-08-16 3 views
1

мне нужно redirect_to пользователей/индексную страницу при отправке формы, но браузер показывает ту же страницу, стирает все формы и показывает этот странный адрес:redirect_to перенаправляет ту же страницу, тест не подведет

http://localhost:3000/signup?utf8=%E2%9C%93&authenticity_token=aKZ7qWC9ZUMyFXYNxvVfL%2F4BpTSB0sZtpm1a4AWNvWE%3D&user%5Bsecondname%5D=&user%5Bfirstname%5D=&user%5Bpatronymic%5D=&user%5Bdateofbirth%283i%29%5D=&user%5Bdateofbirth%282i%29%5D=&user%5Bdateofbirth%281i%29%5D=&user%5Blogin%5D=&user%5Bemail%5D=&user%5Bpassword%5D=&user%5Bpassword_confirmation%5D=&commit=%D0%97%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%D1%81%D1%8F 

Same самое происходит, когда я представить его с пустыми формами (не список ошибок) Хотя RSpec говорит, что все тесты проходят ...

Мой USERS_CONTROLLER.RB:

class UsersController < ApplicationController 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     redirect_to action: :index 
    else 
     render 'new' 
    end 
    end 

    def index 
    @users = User.all 
    end 

    def destroy 
    @user = User.find(params[:id]) 
    @user.destroy 

    redirect_to action: :index 
    end 
end 

Мои ПОЛЬЗОВАТЕЛЕЙ/new.html.erb

<% provide(:title, 'Sign up') %> <h1>Регистрация</h1> 

<div class="container"> 
    <form class="form-signin form-horizontal"> 

     <%= form_for(@user) do |f| %> 
      <%= render 'shared/error_messages' %> 

      <div class="control-group"> 
       <div class="controls"> 
        <%= f.text_field :secondname, :class => "input-block-level", :placeholder => "Фамилия" %> 
       </div> 
      </div> 
      <div class="control-group"> 
       <div class="controls"> 
        <%= f.text_field :firstname, :class => "input-block-level", :placeholder => "Имя" %> 
       </div> 
      </div> 
      <div class="control-group"> 
       <div class="controls"> 
        <%= f.text_field :patronymic, :class => "input-block-level", :placeholder => "Отчество" %> 
       </div> 
      </div> 

      <%= f.label :dateofbirth, :"Дата рождения", :class => "control-label" %> 
      <div class="control-group"> 
       <div class="controls"> 
        <%= f.date_select :dateofbirth, start_year: 1933, end_year: 2006, :order => [:day, :month, :year], :prompt => { :day => 'День', :month => 'Месяц', :year => 'Год' } %> 
       </div> 
      </div> 
      <div class="control-group"> 
       <div class="controls"> 
        <%= f.text_field :login, :class => "input-block-level", :placeholder => "Логин" %> 
       </div> 
      </div> 
      <div class="control-group"> 
       <div class="controls"> 
        <%= f.text_field :email, :class => "input-block-level", :placeholder => "Email" %> 
       </div> 
      </div> 
      <div class="control-group"> 
       <div class="controls"> 
        <%= f.password_field :password, :class => "input-block-level", :placeholder => "Пароль" %> 
       </div> 
      </div> 
      <div class="control-group"> 
       <div class="controls"> 
        <%= f.password_field :password_confirmation, :class => "input-block-level", :placeholder => "Подтверждение пароля" %> 
       </div> 
      </div> 
      <div class="control-group"> 
       <div class="controls"> 
        <%= f.submit "Зарегистрироваться", :id => "register", :class => "btn btn-info" %> 
       </div> 
      </div> 

     <% end %> 
    </form> </div> 

Мой _ERROR_MESSAGES.HTML.ERB:

<% if @user.errors.any? %> 
<div id="error_explanation"> 
    <div class="alert alert-error"> 
     The form contains <%= pluralize(@user.errors.count, "error") %>. 
    </div> 
    <ul> 
     <% @user.errors.full_messages.each do |msg| %> 
      <li>* <%= msg %></li> 
     <% end %> 
    </ul> 
</div> 

ЧАСТЬ USER_PAGES_SPEC.RB

describe "signup" do 

before { visit signup_path } 

let(:submit) { "register" } 

describe "with invalid information" do 
    it "should not create a user" do 
    expect { click_button submit }.not_to change(User, :count) 
    end 
end 

describe "with valid information" do 
    before do 
    fill_in "user_firstname",    with: "Ivan" 
    fill_in "user_secondname",    with: "Ivanov" 
    fill_in "user[patronymic]",   with: "Ivanovich" 
    select "2000",       from: "user[dateofbirth(1i)]" 
    select "November",      from: "user[dateofbirth(2i)]" 
    select "11",       from: "user[dateofbirth(3i)]" 
    fill_in "user[login]",     with: "IvanIvanov" 
    fill_in "user[email]",     with: "[email protected]" 
    fill_in "user[password]",    with: "foobar" 
    fill_in "user[password_confirmation]", with: "foobar" 
    end 

    it "should create a user" do 
    expect { click_button submit }.to change(User, :count).by(1) 
    end 
end 

Wow! Оказалось, что проблема находится в теге <form>. Без этого все работает нормально, но почему? Bootstrap говорит: Добавить .form-horizontal в форму

ответ

0

Проблема была в двух тегами <form>, который вы использовали. Также рекомендуется отображать сообщения об ошибках вне или перед тегом form_for. Для добавления класса или любого атрибута HTML может быть добавлено в form_for или подобных тег, как этот :attr_name => "value" так что если вы хотите добавить class предположить myclass вы можете сделать это, как :class => "myclass"

0

Ваш redirect_to неверен, он должен перенаправить на путь (url).

Try:

redirect_to users_path 
+0

я заменил его, теперь адрес не меняется, но страница все равно то же самое = ( – WiseDash

+0

Это сработало до того, как я добавил некоторые css, bootstrap и изменил имена на русский язык. Не знаю, как это может повлиять на это. Похоже, я что-то изменил. – WiseDash

0

Вы можете непосредственно перенаправить к действию также просто использовать

redirect_to :action => :index 
+0

Да, но это не исправляет. Я не понимаю, почему возраст сообщений об ошибках исчез и проверка прошла нормально. – WiseDash

+0

@WiseDash, что было сообщением об ошибке, которое оно показывало? – dirtydexter

+0

Сообщения об ошибках, которые мне были необходимы, например: Форма содержит 4 ошибки. * Войти не может быть пустым * Вход слишком короткий (минимум 5 символов) * Пароль не может быть пустым * Подтверждение пароля не может быть пустым Они не ушли после вашей помощи, конечно, раньше , Теперь все в порядке, это было неправильно, потому что я не знал, что form helper form_for создает форму тега в html (мои первые шаги в ruby ​​heh^__ ^) и добавил его в users/new.html.erb. Но в любом случае я не понимаю, как добавить класс формы-горизонтальный в нем не с

, а с form_for. В любом случае спасибо за внимание !!! – WiseDash

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