首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >的嵌套形式的未定义方法`remember_me‘

的嵌套形式的未定义方法`remember_me‘
EN

Stack Overflow用户
提问于 2015-10-28 07:29:16
回答 2查看 734关注 0票数 0

我正在学习Michael的教程,但是当我运行bundle exec rake测试时会发现这个错误:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
<% 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能力。从没碰过红宝石。我不太理解这一章中的一半概念。我基本上都是按照指示行事的。因此,请用术语解释:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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不是用户的属性,所以您会得到一个错误。您可以通过向用户模型添加一个虚拟属性来解决这个问题:

代码语言:javascript
复制
class User < ActiveRecord::Base
  attr_accessor :remember_me
  ...

这允许您在用户表单中使用remember_me,并在表单提交时向用户控制器发送params[:user][:remember_me]

票数 4
EN

Stack Overflow用户

发布于 2017-07-29 22:22:21

您正在将“复选框”代码放置到app/views/users/new.html.erb中,这是注册的视图模板,而不是登录。

要使代码正常工作,请将check box代码放入Login视图模板,即app/views/sessions/new.html.erb

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33385228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档