Приложение / просмотров / контакты / new.html.erb

<h2>Add New Contact</h2>

    <div class="row">
      <div class="col-md-8">
      <%= simple_form_for @contact, :url => new_user_contact_path do |f| %>
        <div class="form-group">
          <%= f.label :first_name %>
          <%= f.text_field :first_name, class: "form-control" %>
        </div>
        <div class="form-group">
          <%= f.label :last_name %>
          <%= f.text_field :last_name, class: "form-control" %>
        </div>
        <div class="form-group">
          <%= f.input :date_of_birth, as: :date,  discard_year:true, order:[:day, :month] %>
        </div>
        <div class="form-group">
          <%= f.label :sex %>
          <%= f.select :sex, [:male, :female], class: "form-control" %>
        </div>
        <div class="form-group">
          <%= f.label :phone_number %>
          <%= f.text_field :phone_number, class: "form-control" %>
        </div>
        <div class="form-group">
          <%= f.label :address %>
          <%= f.text_area :address, class: "form-control" %>
        </div>
        <div class="form-group">
          <%= f.button :submit, "Submit", class: "btn btn-success btn-md btn-block" %>
          </div>
        </div>
      <% end %>
      </div>
    </div>

    <%= link_to "Back", user_contacts_path %>

Мои маршруты, когда я бегаю rake routes

 Prefix Verb   URI Pattern                                 Controller#Action
            new_user_session GET    /users/sign_in(.:format)                    devise/sessions#new
                user_session POST   /users/sign_in(.:format)                    devise/sessions#create
        destroy_user_session DELETE /users/sign_out(.:format)                   devise/sessions#destroy
               user_password POST   /users/password(.:format)                   devise/passwords#create
           new_user_password GET    /users/password/new(.:format)               devise/passwords#new
          edit_user_password GET    /users/password/edit(.:format)              devise/passwords#edit
                             PATCH  /users/password(.:format)                   devise/passwords#update
                             PUT    /users/password(.:format)                   devise/passwords#update
    cancel_user_registration GET    /users/cancel(.:format)                     devise/registrations#cancel
           user_registration POST   /users(.:format)                            devise/registrations#create
       new_user_registration GET    /users/sign_up(.:format)                    devise/registrations#new
      edit_user_registration GET    /users/edit(.:format)                       devise/registrations#edit
                             PATCH  /users(.:format)                            devise/registrations#update
                             PUT    /users(.:format)                            devise/registrations#update
                             DELETE /users(.:format)                            devise/registrations#destroy
               user_contacts GET    /users/:user_id/contacts(.:format)          contacts#index
                             POST   /users/:user_id/contacts(.:format)          contacts#create
            new_user_contact GET    /users/:user_id/contacts/new(.:format)      contacts#new
           edit_user_contact GET    /users/:user_id/contacts/:id/edit(.:format) contacts#edit
                user_contact GET    /users/:user_id/contacts/:id(.:format)      contacts#show
                             PATCH  /users/:user_id/contacts/:id(.:format)      contacts#update
                             PUT    /users/:user_id/contacts/:id(.:format)      contacts#update
                             DELETE /users/:user_id/contacts/:id(.:format)      contacts#destroy
                       users GET    /users(.:format)                            users#index
                             POST   /users(.:format)                            users#create
                    new_user GET    /users/new(.:format)                        users#new
                   edit_user GET    /users/:id/edit(.:format)                   users#edit
                        user GET    /users/:id(.:format)                        users#show
                             PATCH  /users/:id(.:format)                        users#update
                             PUT    /users/:id(.:format)                        users#update
                             DELETE /users/:id(.:format)                        users#destroy
                       index GET    /index(.:format)                            redirect(301, /)
                        root GET    /                                           high_voltage/pages#show {:id=>"index"}
                        page GET    /pages/*id                                  high_voltage/pages#show

Конфиг / routes.rb

Rails.application.routes.draw do
      devise_for :users

      resources :users do
        resources :contacts
      end
    end

Мои действия new и create в ContactsController

     def new
        @contact = Contact.new
      end

      def create
        @contact = Contact.new(contact_params)
        @contact.user = current_user
        if @contact.save
          flash[:success] = "Contact was successfully created!"
          redirect_to @contact.user
        else
          render :new
        end
      end

Вот в чем проблема: Я получаю сообщение об ошибке: No route matches [POST] "/users/1/contacts/new", когда отправляю форму по адресу http: // localhost: 3000 / users / 1 / contacts / new. В чем может быть проблема?

0
kinsomicrote 23 Мар 2016 в 15:59
1
Вы просто отправляете сообщения по неправильному маршруту. все, что имеет в конце / new, обычно является get. Созданный маршрут не закончится через new
 – 
toddmetheny
23 Мар 2016 в 16:00

1 ответ

Лучший ответ

Этот:

 <%= simple_form_for @contact, :url => new_user_contact_path do |f| %>

Должно быть:

 <%= simple_form_for @contact, :url => user_contacts_path do |f| %>
3
toddmetheny 23 Мар 2016 в 16:01
Когда я это сделаю, я получаю сообщение об ошибке: неинициализированные UsersControllers. Это должно случиться? Учитывая тот факт, что я использую devise.
 – 
kinsomicrote
23 Мар 2016 в 16:19
Я считаю, что это должно затронуть контроллер контактов: POST /users/:user_id/contacts(.:format) contacts#create Вы уверены, что вам нужно вложить ресурсы контактов внутри пользователя? Я не знаю логики вашего приложения. Можно сделать контакты принадлежащими создавшему пользователю, не вкладывая маршрут, и я думаю, что будет проще оставить ресурсы отдельно.
 – 
toddmetheny
23 Мар 2016 в 16:25
Не могли бы вы опубликовать свой routes.rb?
 – 
toddmetheny
23 Мар 2016 в 16:25
Логика приложения такова, что у пользователя много контактов, а контакты принадлежат пользователю. Это простое веб-приложение для тестирования функциональности загрузки в PDF. Маршруты.rb выше.
 – 
kinsomicrote
23 Мар 2016 в 16:40
Да, я бы не стал вкладывать маршруты контактов и просто установил user_id равным идентификатору current_user перед созданием контакта. Затем на странице показа контактов просто определите переменную экземпляра контакта как current_user.contacts.
 – 
toddmetheny
23 Мар 2016 в 16:42