Я все время получаю сообщение об ошибке на моей домашней странице:
'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&.company, & не будет вызывать после того, как обнаружит объект вызывающего абонента nil, поэтому, если ваш current_user.user равен нулю, метод компании не будет вызывать



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


он просто говорит, что 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 %>
Или просто войдите в систему, чтобы убедиться, что это не возвращает ноль. Но первое исправление - самое идеальное.
он просто говорит, что current_user равен нулю, вам нужно убедиться, что пользователь вошел в систему, чтобы использовать current_user.company