Неопределенный метод `company 'для nil: NilClass

Я все время получаю сообщение об ошибке на моей домашней странице:

'undefined method `company' for nil:NilClass'

для первой строки следующего кода, показанного ниже. Я не совсем уверен, как это исправить. У меня есть два Контроллеры для companies и customers, потому что я создаю двусторонний рынок.

Когда пользователь щелкает логотип вверху вместо перенаправления на страницу приветствия, отображается страница входа, поскольку домашняя страница - это root_path, но я использую устройство для аутентификации before_action.

<% if ((current_user.company) || (current_user.customer)) %>
   <%= render 'pages/welcome' %>
<% else %>

<% if current_user.is_company %>
   <%= render 'companies/form', company: @company%>
<% else %>

Вот файл home.html.erb с кодом, который является root_path

<% if ((current_user.company) || (current_user.customer)) %>
    <%= render 'pages/welcome' %>
<% else %>

    <% if current_user.is_company %>
        <%= render 'companies/form', company: @company%>
    <% else %>
        <%= render 'customers/form', customer: @customer%>
    <% end %>

<% end %>

Вот мой компанииКонтроллер

class CompaniesController < ApplicationController
    before_action :set_company, only: [:show, :edit, :update, :destroy]

    def index
        @companies = Company.all
    end

    # GET /companies/1
    # GET /companies/1.json
    def show
       @company = Company.find(params[:company_id])
    end

    # GET /companies/new
    def new
       @company = Company.new
    end

    # GET /companies/1/edit
    def edit
    end

    # POST /companies
    # POST /companies.json
    def create
    @company = Company.new(company_params)

      respond_to do |format|

        if @company.save
            format.html { redirect_to @company, notice: 'Company was successfully created.' }
            format.json { render :show, status: :created, location: @company }
        else
            format.html { render :new }
            format.json { render json: @company.errors, status: :unprocessable_entity }
        end
      end
    end

    # PATCH/PUT /companies/1
    # PATCH/PUT /companies/1.json
    def update
      respond_to do |format|
       if @company.update(company_params)
          format.html { redirect_to @company, notice: 'Company was successfully updated.' }
          format.json { render :show, status: :ok, location: @company }
       else
          format.html { render :edit }
          format.json { render json: @company.errors, status: :unprocessable_entity }
       end
     end
   end

   # DELETE /companies/1
   # DELETE /companies/1.json
   def destroy
      @company.destroy
      respond_to do |format|
         format.html { redirect_to companies_url, notice: 'Company was successfully destroyed.' }
         format.json { head :no_content }
      end
   end

   private
      # Use callbacks to share common setup or constraints between actions.
      def set_company
          @company = Company.find(params[:id])
      end

      # Never trust parameters from the scary internet, only allow the 
      white list through.
         def company_params
            params.require(:company).permit(:username, :phone, :website, :street, :city, :state, :country, :user_id)
         end
     end

он просто говорит, что current_user равен нулю, вам нужно убедиться, что пользователь вошел в систему, чтобы использовать current_user.company

xploshioOn 21.07.2018 02:35

О да, это сработало. Вы знаете, правильно ли я отображаю страницу приветствия? Поскольку после того, как пользователь вводит свои данные, они по-прежнему перенаправляются на страницу формы, а не на страницу приветствия.

Mariam Antar 21.07.2018 02:40

вы не выполняете эти типы проверки в представлениях, просто делаете такие вещи на контроллере, когда вы получаете параметры формы, перенаправляете на домашнюю страницу, если все в порядке, или повторно визуализируете форму, если есть ошибка

xploshioOn 21.07.2018 02:48

для преодоления этой проблемы вам необходимо проверить current_user&.company, & не будет вызывать после того, как обнаружит объект вызывающего абонента nil, поэтому, если ваш current_user.user равен нулю, метод компании не будет вызывать

uzaif 21.07.2018 05:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
4
713
2

Ответы 2

он просто говорит, что current_user - это nil, вам нужно убедиться, что пользователь вошел в систему, чтобы использовать current_user.company

В журнале содержится подробная информация о том, почему компания возвращает ноль. Компания требует наличия в нем объекта для правильной загрузки страницы. Но это не так, потому что ни один пользователь не вошел в систему, чтобы компания могла вернуть объект.

<% if ((current_user.company) || (current_user.customer)) %> <%= render 'pages/welcome' %> <% else %>

<% if current_user.is_company %> <%= render 'companies/form', company: @company%> <% else %>

is returning a nil because no user is logged in.

You can first check if there is a user logged in and then render something before this to prevent the error page

<% if (current_user) <% if ((current_user.company) || (current_user.customer)) %> <%= render 'pages/welcome' %> <% else %>

<% if current_user.is_company %> <%= render 'companies/form', company: @company%> <% end %> <% else %> render something here <% end %>

Или просто войдите в систему, чтобы убедиться, что это не возвращает ноль. Но первое исправление - самое идеальное.

Другие вопросы по теме