Ошибка NoMethod в ruby ​​на рельсах - PullRequest
0 голосов
/ 18 мая 2018

Я следую учебному пособию, в котором мы создаем и обновляем учетные записи пользователей, и я застрял в части редактирования, так как при попытке загрузить страницу редактирования для пользователя я получаю ошибку метода, как показано ниже:

Showing /home/ubuntu/rails_projects/alpha_blog/app/views/shared/_errors.html.erb where line #1 raised:

undefined method `errors' for nil:NilClass
Extracted source (around line #1):
1
2
3
4
5
6

<% if obj.errors.any? %>
  <div class="row">
    <div class="col-xs-8 col-xs-offset-2">
      <div class="panel panel-danger">
        <div class="panel-heading">
          <h2 class="panel-title">

Trace of template inclusion: app/views/users/_form.html.erb, app/views/users/edit.html.erb

Rails.root: /home/ubuntu/rails_projects/alpha_blog

Application Trace | Framework Trace | Full Trace
app/views/shared/_errors.html.erb:1:in `_app_views_shared__errors_html_erb__3874437342468649522_70028100096200'
app/views/users/_form.html.erb:1:in `_app_views_users__form_html_erb__2653828291511096048_70028100213300'
app/views/users/edit.html.erb:4:in `_app_views_users_edit_html_erb___925607472456440074_70028151623400'
Request
Parameters:

{"id"=>"2"}
Toggle session dump
Toggle env dump
Response
Headers:

None

Вот мой пользовательский контроллер:

class UsersController < ApplicationController
  def new
    @user= User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      flash[:success] = "Welcome to the alpha blog #{@user.username}"
      redirect_to articles_path
    else
      render 'new'
    end

  end

  private

  def user_params

    params.require(:user).permit(:username, :email, :password)
  end

  def edit
  @user = User.find(params[:id])

  end 

  def update
  @user = User.find(params[:id])
    if @user.update(user_params)
      flash[:success] = "Your account was updated successfully"
      redirect_to articles_path
    else

      render 'edit'
    end


  end




end

Так как я инициализировал переменную @user в классе редактирования, я думал, что это будет работать.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вот 2 ответа на ваш вопрос

  1. Если вы используете гем " Devise ", попробуйте получить к нему доступ с помощью " resource.errors"вместо obj.errors

  2. Если вы создаете свою пользовательскую форму, то есть в основном в вашей частичной объект не найден.Таким образом, откуда бы эта часть не отображалась, вы можете попробовать использовать приведенный ниже код.Итак, вы пытаетесь получить доступ к ошибке для obj, который является нулевым классом.Попробуйте передать локальные, как показано ниже

    render (: частичный => 'пользователи / каналы',: locals => {: obj => @user})

0 голосов
/ 18 мая 2018

В файле _app / views / users / form.html.erb при рендеринге _shared / errors.html.erb частично также передается obj как локальный для него. Вот как вы можете это сделать:

<%= render 'shared/errors', obj: @user %>

Если это не работает, пожалуйста, отправьте users / edit и users / _form шаблоны тоже.

...