嵌套形式的未定义方法“remember_me”
Undefined method `remember_me' in nested form for
我正在按照 Michael Hartl 的教程进行操作,但是当我 运行 bundle exec rake 测试时出现此错误:
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>
^就像rails教程中的清单8.47 https://www.railstutorial.org/book/log_in_log_out
好像rails认为:remember_me是一个方法,但是为什么呢???为什么 :remember_me 被认为是一种方法,而所有其他标签都不是???我他妈的不明白。
背景:我经历了半个ruby教程并进入了这个rails教程。我有非常基本的 html 和 css 能力。以前从未接触过 ruby。而且这一章有一半的概念我真的不明白。我主要只是按照说明进行操作。所以,请用新手的术语解释 :)
清单 8.47 中的表单用于会话:
<%= form_for(:session, url: login_path) do |f| %>
但是您的表格是给用户的:
<%= form_for(@user) do |f| %>
form_for
助手 binds a form to an object。当该对象是模型的实例时,如 @user
、rails 期望每个标签和字段都是该模型的属性。由于 remember_me
不是 User 的属性,因此会出现错误。您可以通过向用户模型添加虚拟属性来解决此问题:
class User < ActiveRecord::Base
attr_accessor :remember_me
...
这允许您在用户表单中使用 remember_me
,并在提交表单时将 params[:user][:remember_me]
发送到您的用户控制器。
您将 'check box' 代码放入 app/views/users/new.html.erb
,这是 注册 的视图模板,而不是登录。
要使代码正常工作,请将 check box
代码放入 Login 视图模板中,即 app/views/sessions/new.html.erb
.
我正在按照 Michael Hartl 的教程进行操作,但是当我 运行 bundle exec rake 测试时出现此错误:
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>
^就像rails教程中的清单8.47 https://www.railstutorial.org/book/log_in_log_out
好像rails认为:remember_me是一个方法,但是为什么呢???为什么 :remember_me 被认为是一种方法,而所有其他标签都不是???我他妈的不明白。
背景:我经历了半个ruby教程并进入了这个rails教程。我有非常基本的 html 和 css 能力。以前从未接触过 ruby。而且这一章有一半的概念我真的不明白。我主要只是按照说明进行操作。所以,请用新手的术语解释 :)
清单 8.47 中的表单用于会话:
<%= form_for(:session, url: login_path) do |f| %>
但是您的表格是给用户的:
<%= form_for(@user) do |f| %>
form_for
助手 binds a form to an object。当该对象是模型的实例时,如 @user
、rails 期望每个标签和字段都是该模型的属性。由于 remember_me
不是 User 的属性,因此会出现错误。您可以通过向用户模型添加虚拟属性来解决此问题:
class User < ActiveRecord::Base
attr_accessor :remember_me
...
这允许您在用户表单中使用 remember_me
,并在提交表单时将 params[:user][:remember_me]
发送到您的用户控制器。
您将 'check box' 代码放入 app/views/users/new.html.erb
,这是 注册 的视图模板,而不是登录。
要使代码正常工作,请将 check box
代码放入 Login 视图模板中,即 app/views/sessions/new.html.erb
.