我正在学习Michael的教程,但是当我运行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一样
rails似乎认为:remember_me是一种方法,但为什么?为什么:remember_me被认为是一种方法,而所有其他标签都不是?我才不明白呢。
背景:我已经完成了半个红宝石教程,并进入了这个rails教程。我有非常基本的html和css能力。从没碰过红宝石。我不太理解这一章中的一半概念。我基本上都是按照指示行事的。因此,请用术语解释:)
发布于 2015-10-28 08:37:44
清单8.47中的表单用于会话:
<%= form_for(:session, url: login_path) do |f| %>
但是您的表单是针对用户的:
<%= form_for(@user) do |f| %>
form_for助手将窗体绑定到对象。。当该对象是一个模型的实例(如@user )时,rails期望每个标签和字段都是该模型的属性。因为remember_me不是用户的属性,所以您会得到一个错误。您可以通过向用户模型添加一个虚拟属性来解决这个问题:
class User < ActiveRecord::Base
attr_accessor :remember_me
...这允许您在用户表单中使用remember_me,并在表单提交时向用户控制器发送params[:user][:remember_me]。
发布于 2017-07-29 22:22:21
您正在将“复选框”代码放置到app/views/users/new.html.erb中,这是注册的视图模板,而不是登录。
要使代码正常工作,请将check box代码放入Login视图模板,即app/views/sessions/new.html.erb。
https://stackoverflow.com/questions/33385228
复制相似问题