Частичные «ошибки» работают для «нового» пользователя, но не «редактировать» пользователя - PullRequest
0 голосов
/ 31 мая 2018

Я изучаю Ruby on Rails и на 100% новичок в программировании.В настоящее время я получаю это сообщение:

Извлеченный источник (вокруг строки # 1): неопределенный метод `errors 'для nil: NilClass

<% if obj.errors.any? %>

Я только получаюэто сообщение в моем edit.html.erb:

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

<div class='row'>
    <div class='col-xs-12'>
        <%= form_for(@user, :html => {class: "form-horizontal", role: "form"}) do |f| %>
            <div class="form-group">
                <div class="control-label col-sm-2">
                    <%= f.label :username %>
                </div>
                <div class="col-sm-8">
                <%= f.text_field :username, class: "form-control", placeholder: "Enter Username", autofocus: true %>
                </div>
            </div>
            <div class="form-group">
                <div class="control-label col-sm-2">
                    <%= f.label :email %>
                </div>
                <div class="col-sm-8">
                    <%= f.email_field :email, class: "form-control", placeholder: "Enter Email"  %>
                </div>
            </div>
                  <div class="form-group">
                <div class="control-label col-sm-2">
                    <%= f.label :password %>
                </div>
                <div class="col-sm-8">
                    <%= f.password_field :password, class: "form-control", placeholder: "Enter Password"  %>
                </div>
            </div>
            <div class = "form-group">
                <div class = "col-sm-offset-2 col-sm-10">
                    <%= f.submit 'Sign Up', class: "btn btn-primary btn-md" %>
                </div>
            </div>
        <% end %>

        <div class = "col-xs-4 col-xs-offset-5">
            [ <%= link_to 'Back to Index', articles_path %> ]
        </div>
</div>
    </div>

Мой new.html.erb имеет точно такой же код, но не получает сообщение об ошибке.Это UsersController:

class UsersController < ApplicationController

   def new 
      @user = User.new 
   end

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

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

    def update

    end
   end


    private

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

Это частичная ошибка:

<% 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">
                    <%= pluralize(obj.errors.count, "error") %>
                    prohibited this article from being saved:
                    </h2>
                    <div class ="panel-body">
                        <ul>
                             <% obj.errors.full_messages.each do |msg| %>
                                <li><%= msg %></li>
                             <% end %>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    </div>
<% end %>

Что я делаю не так?Заранее спасибо!

Ответы [ 3 ]

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

Кажется, ваше update действие пусто. Я имею в виду, что никакого действительного кода для действия нет, вы можете добавить какой-нибудь действительный код для обновления, как показано ниже

def update
    @user = User.find(params[:id])
    respond_to do |format|
        if @user.update_attributes(user_params)
            flash[:success] = 'User was successfully updated.'
            format.html { redirect_to @user }
            format.xml  { head :ok }
        else
            format.html { render :action => "edit" }
            format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
        end
    end
end 

Теперь попробуйте проверить правильность с использованием неверных данных.

0 голосов
/ 16 июня 2018

Оказывается, я закрыл блок if в методе Create, но не закрыл сам метод Create.

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

Не уверен, почему вы делаете партиал для этого, когда есть множество драгоценных камней и помощников, которые делают это для вас.

Проблема в том, что вы забыли locals и partial, как можетечитайте в руководстве по Rails .

<%= render partial: 'shared/errors', locals: {obj: @user} %>

Лично я бы рекомендовал изменить obj на object, в рельсах нам нравится выписывать слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...