Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Railstutorial ActionView::Template::Error:未定义的方法`email';零级:零级_Ruby On Rails_Railstutorial.org - Fatal编程技术网

Ruby on rails Railstutorial ActionView::Template::Error:未定义的方法`email';零级:零级

Ruby on rails Railstutorial ActionView::Template::Error:未定义的方法`email';零级:零级,ruby-on-rails,railstutorial.org,Ruby On Rails,Railstutorial.org,我正在第二次学习Hartl教程,只是这一次我试图为个人项目修改它。现在我被难住了,为什么我不能让我的测试通过(或者编辑设置页面来呈现)。问题与此非常相似,只是返回的错误是电子邮件,而不是downcase,我使用的是默认测试套件,而不是Rspec 以下是错误代码: ERROR["test_unsuccessful_edit", UsersEditTest, 0.7226080000109505] test_unsuccessful_edit#UsersEditTest (0.72s) Actio

我正在第二次学习Hartl教程,只是这一次我试图为个人项目修改它。现在我被难住了,为什么我不能让我的测试通过(或者编辑设置页面来呈现)。问题与此非常相似,只是返回的错误是电子邮件,而不是downcase,我使用的是默认测试套件,而不是Rspec

以下是错误代码:

ERROR["test_unsuccessful_edit", UsersEditTest, 0.7226080000109505]
 test_unsuccessful_edit#UsersEditTest (0.72s)
ActionView::Template::Error:         ActionView::Template::Error: undefined method `email' for nil:NilClass
            app/helpers/users_helper.rb:6:in `gravatar_for'
            app/views/users/edit.html.erb:8:in `_app_views_users_edit_html_erb___3727331653542369693_70276142435800'
            test/integration/users_edit_test.rb:11:in `block in <class:UsersEditTest>'
app/views/users/edit.html.erb

<% provide(:title, "Edit user") %>
<% provide(:button_text, 'Edit account') %>
<h1>Update your profile</h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <div class="gravatar_edit">
      <%= gravatar_for @user %>
      <a href="http://gravatar.com/emails" target="_blank" rel="noopener noreferrer">change</a>
    </div>

    <%= render 'form' %>

  </div>
</div>
这是用户控制器

app/controllers/user_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      log_in @user
      flash[:success] = 'Welcome to the Sample App'
      redirect_to @user
    else
      render 'new'
    end
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(user_params)
      # Handle a successful update.
    else
      render 'edit'
    end
  end
app/controllers/user\u controller.rb
类UsersController
您需要在
userscocontroller#edit
操作中设置
@user
实例变量。像这样

class UsersController < ApplicationController 
...
  def edit
    @user = User.find_by_id(params[:id]) 
  end 
...
end 
class UsersController

如果这不能解决您的问题,您可以将
userscoontroller
代码粘贴到此处,以帮助我们解决您的问题。然而,为了使代码更整洁,您可以使用回调设置@user,并在某些操作上调用该回调

您需要在
userscocontroller#edit
操作中设置
@user
实例变量。像这样

class UsersController < ApplicationController 
...
  def edit
    @user = User.find_by_id(params[:id]) 
  end 
...
end 
class UsersController

如果这不能解决您的问题,您可以将
userscoontroller
代码粘贴到此处,以帮助我们解决您的问题。然而,为了使代码更整洁,您可以使用回调设置@user,并在某些操作上调用该回调

我刚刚编辑添加了用户控制器。我想我已经把它作为一个实例变量,但可能它写得不正确您的
用户控制器中没有
编辑
操作
?添加
编辑
,就像在我的示例中一样,一切都应该很好。哦,不:(是的,我现在觉得自己很笨。我一直盯着创建和更新的突出显示,以至于我完全忽略了这一点。谢谢!我只是编辑了添加用户控制器。我想我已经把它作为一个实例变量,但可能写得不正确。
用户控制器
?添加中没有
编辑
操作
编辑
就像我的例子一样,一切都应该很好。哦,不:(是的,我现在觉得自己很笨。我一直盯着创建和更新的亮点,以至于我完全忽略了这一点。谢谢!我不知道这是否有帮助,但当我运行Rubocop时,我也收到了针对用户帮助器的警告,错误是:app/helpers/users\u helper。rb:5:5:W:Lint/uselessSignment:to变量-gravatar\u id.gravatar\u id=Digest::MD5::hexdigest(user.email.downcase)我不知道这是否有帮助,但当我运行Rubocop时,我也会收到针对错误中的用户助手的警告:app/helpers/users\u helper.rb:5:5:W:Lint/UselessAssignment:variable-gravatar\u id.gravatar\u id=Digest::MD5::hexdigest(user.email.downcase)
private

    # Converts email to all lower-case
    def downcase_email
      self.email = email.downcase
    end
app/controllers/user_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      log_in @user
      flash[:success] = 'Welcome to the Sample App'
      redirect_to @user
    else
      render 'new'
    end
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(user_params)
      # Handle a successful update.
    else
      render 'edit'
    end
  end
class UsersController < ApplicationController 
...
  def edit
    @user = User.find_by_id(params[:id]) 
  end 
...
end