Проблемы: когда я нажимаю на действие link_to, приложение вызывает другой контроллер, вызывая ошибку отсутствующего идентификатора.
У меня есть меню, в котором отображаются кнопки для создания новых объектов, которые преобразуются в навигационные ссылки при создании объекта пользователем.
поведение использует object.exists? помощник.
<div class="nav-wrapper">
<!-- start menu -->
<ul class="nav flex-column">
<li class="list-group-item"><%= link_to "Personal information", edit_user_registration_path %></li>
<li class="list-group-item"><%= link_to "Settings", notification_settings_path %></li>
<li class="list-group-item"><%= link_to "Payments", payment_method_path %></li>
<% if Prequalification.exists? %>
<li class="list-group-item"><%= link_to "Edit prequalification",edit_prequalification_path(@user, @prequalification) %></li>
<% end %>
<% if Company.exists? %>
<li class="list-group-item"><%= link_to "Edit company data",edit_company_path(@user, @company) %></li>
<% end %>
</ul>
<ul class="nav flex-column mt-5">
<% if !Company.exists? %>
<a class="btn btn-primary btn-block mt-1" href="companies/new">Add a company</a>
<% end %>
<% if !Prequalification.exists? %>
<a class="btn btn-primary btn-block mt-1" href="prequalifications/new">Prequalify for loan or rents</a>
<% end %>
</ul>
</div>
Благодаря этому сообщению:
https://stackoverflow.com/questions/13186722/what-is-the-difference-between-using-exists-and-present-in-ruby
Я могу создать новую компанию и получить доступ к ссылке на редактирование, но когда я пытаюсь впоследствии создать файл предварительной квалификации, я получаю:
ActionController::UrlGenerationError in Prequalifications#new
No route matches {:action=>"edit", :controller=>"companies", :format=>nil, :id=>nil, :locale=>:en}, possible unmatched constraints: [:id]
Контроллеры для компаний и предварительных квалификаций разделены. Я не понимаю, почему происходит ошибка. Тем более, что если я удаляю ссылку link_to на модель компании, прежде чем приступить к предварительному квалификационному экзамену, то, похоже, она работает как задумано.
мои маршруты очень просты:
resources :prequalifications
resources :companies
мой контроллер тоже довольно прост:
def new
@company = Company.new
end
def create
@company = current_user.build_company(company_params
end
def edit
@user = current_user
@company = Company.find_by(id: [params[:id], params[:company_id]])
end
Контроллер для другой модели выглядит очень похоже.
Откуда могло произойти это поведение?