2015-10-28 5 views
0

Я следующий уроком Майкла Hartl, но я получаю эту ошибку, когда я запускаю тест расслоения Exec грабли:Неопределенный метод `Remember_Me» в вложенной форме для

1) Error: 
UsersControllerTest#test_should_get_new: 
ActionView::Template::Error: undefined method `remember_me' for #<User:0x000000058544b8> 
    app/views/users/new.html.erb:25:in `block (2 levels) in _app_views_users_new_html_erb__1810619291483938060_46219160' 
    app/views/users/new.html.erb:24:in `block in _app_views_users_new_html_erb__1810619291483938060_46219160' 
    app/views/users/new.html.erb:6:in `_app_views_users_new_html_erb__1810619291483938060_46219160' 
    test/controllers/users_controller_test.rb:6:in `block in <class:UsersControllerTest>' 


    2) Error: 
UsersSignupTest#test_invalid_signup_information: 
ActionView::Template::Error: undefined method `remember_me' for #<User:0x00000006acef08> 
    app/views/users/new.html.erb:25:in `block (2 levels) in _app_views_users_new_html_erb__1810619291483938060_46219160' 
    app/views/users/new.html.erb:24:in `block in _app_views_users_new_html_erb__1810619291483938060_46219160' 
    app/views/users/new.html.erb:6:in `_app_views_users_new_html_erb__1810619291483938060_46219160' 
    test/integration/users_signup_test.rb:6:in `block in <class:UsersSignupTest>' 


    3) Error: 
UsersSignupTest#test_valid_signup_information: 
ActionView::Template::Error: undefined method `remember_me' for #<User:0x000000074f6ff8> 
    app/views/users/new.html.erb:25:in `block (2 levels) in _app_views_users_new_html_erb__1810619291483938060_46219160' 
    app/views/users/new.html.erb:24:in `block in _app_views_users_new_html_erb__1810619291483938060_46219160' 
    app/views/users/new.html.erb:6:in `_app_views_users_new_html_erb__1810619291483938060_46219160' 
    test/integration/users_signup_test.rb:17:in `block in <class:UsersSignupTest>' 

Это new.html.erb файл:

<% provide(:title, 'Sign up') %> 
<h1>Sign up</h1> 

<div class="row"> 
    <div class="col-md-6 col-md-offset-3"> 
    <%= form_for(@user) do |f| %> 
     <%= render 'shared/error_messages' %> 

     <%= f.label :name %> 
     <%= f.text_field :name, class: 'form-control' %> 

     <%= f.label :email %> 
     <%= f.email_field :email, class: 'form-control' %> 

     <%= f.label :password %> 
     <%= f.password_field :password, class: 'form-control' %> 

     <%= f.label :password_confirmation, "Confirmation" %> 
     <%= f.password_field :password_confirmation, class: 'form-control' %> 

     <%= f.label :remember_me, class: "checkbox inline" do %> 
     <%= f.check_box :remember_me %> 
     <span>Remember me on this computer</span> 
     <% end %> 

     <%= f.submit "Create my account", class: "btn btn-primary" %> 
    <% end %> 
    </div> 
</div> 

^Так же, как листинг 8.47 в рельсах учебнике https://www.railstutorial.org/book/log_in_log_out

кажется рельсы думает: Remember_Me это метод, но почему ??? Почему: remember_me считается методом, когда все остальные метки не являются ??? Я не понимаю его.

Фон: Я прошел половину рубинового учебника и вошел в этот учебник по рельсам. У меня есть основные возможности html и css. Никогда не трогал рубин раньше. И я не понимаю половину концепций в этой главе. Я в основном просто следовал инструкциям. Поэтому, пожалуйста, объясните, в терминах нуб :)

+0

У вас есть 'remember_me' в таблице' users'? – Pavan

+1

Произошла такая же ошибка! – kstratis

ответ

3

форме в листинге 8.47 для сеанса:

<%= form_for(:session, url: login_path) do |f| %>

но ваша форма для пользователя:

<%= form_for(@user) do |f| %>

form_for помощник binds a form to an object. Когда этот объект является экземпляром модели, например @user, рельсы ожидают, что каждая метка и поле будут атрибутом этой модели. Поскольку remember_me не является атрибутом для пользователя, вы получаете сообщение об ошибке. Вы можете исправить это путем добавления виртуального атрибута модели User:

class User < ActiveRecord::Base 
    attr_accessor :remember_me 
    ... 

Это позволяет использовать remember_me в вашей пользовательской форме, и посылает params[:user][:remember_me] к контроллеру пользователей при отправке формы.

+0

Спасибо за очистку воздуха от этого – kstratis

0

Вы размещаете код «checkbox» в app/views/users/new.html.erb, который является шаблоном просмотра для . Регистрация, а не вход.

Чтобы сделать код работает, поместите check box код в шаблон вида на Войти, т.е. app/views/sessions/new.html.erb.

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