Продолжайте получать NoMethodError - PullRequest
0 голосов
/ 28 августа 2018

Я застрял с проблемой. После часа поиска я все еще работаю над этой проблемой. Я прошел здесь большинство вопросов, но ни один из них не работает для меня Такое ощущение, что я пропустил что-то простое.

Это моя ошибка

ActionView::Template::Error (undefined method `client_infos_path' for # 
.  <#<Class:0x007fda7a69b160>:0x007fda7a6994a0>
Did you mean?  client_session_path
           client_path
           clients_path):
   1: <h2>Add <%= current_user.username%> info</h2>
   2:
   3: <%= form_for @client_info do |f| %>
   4:   <div class="field">
   5:     <%= f.label :company_size, 'Company Size' %> <br />
   6:     <%= f.text_field :company_size %>

app/views/client_infos/new.html.erb:3:in 
app_views_client_infos_new_html_erb__493536261245691520_70288166673800'

Вот мой контроллер

class ClientInfosController < ApplicationController
  before_action :authorize_user

  def new
   # binding.pry
   @client_info = ClientInfo.new
   @client = Client.find(params[:client_id])
  end

И мой routes.rb

resources :clients do
  resources :projects
  resources :client_infos, only: [:new, :create]
end

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Если вы введете rake routes в своей консоли, вы получите:

        client_projects GET    /clients/:client_id/projects(.:format)              projects#index
                        POST   /clients/:client_id/projects(.:format)              projects#create
     new_client_project GET    /clients/:client_id/projects/new(.:format)          projects#new
    edit_client_project GET    /clients/:client_id/projects/:id/edit(.:format)     projects#edit
         client_project GET    /clients/:client_id/projects/:id(.:format)          projects#show
                        PATCH  /clients/:client_id/projects/:id(.:format)          projects#update
                        PUT    /clients/:client_id/projects/:id(.:format)          projects#update
                        DELETE /clients/:client_id/projects/:id(.:format)          projects#destroy
    client_client_infos POST   /clients/:client_id/client_infos(.:format)          client_infos#create
 new_client_client_info GET    /clients/:client_id/client_infos/new(.:format)      client_infos#new
                clients GET    /clients(.:format)                                  clients#index
                        POST   /clients(.:format)                                  clients#create
             new_client GET    /clients/new(.:format)                              clients#new
            edit_client GET    /clients/:id/edit(.:format)                         clients#edit
                 client GET    /clients/:id(.:format)                              clients#show
                        PATCH  /clients/:id(.:format)                              clients#update
                        PUT    /clients/:id(.:format)                              clients#update
                        DELETE /clients/:id(.:format)                              clients#destroy

Как видите, у вас нет пути client_infos, потому что client_infos вложено в clients. Вместо этого у вас есть client_client_infos - что вы должны делать, учитывая ваш routes.rb. Вы также можете сделать это следующим образом (как описано в 2.9 Создание путей и URL-адресов из объектов ):

<%= form_for [@client, @client_info] do |f| %>

И Rails определит, что вы хотите использовать client_client_infos именованный маршрут.

0 голосов
/ 28 августа 2018

ActionView :: Template :: Error (неопределенный метод client_infos_path для

У вас есть вложенных ресурсов с client_infos в clients, поэтому такой маршрут для вас недоступен. Вам нужно изменить

<%= form_for @client_info do |f| %>

до

<%= form_for [@client, @client_info] do |f| %>

Совет:

Выполнить rake routes. В нем будут перечислены все доступные для вас маршруты.

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