2015-05-20 3 views
1

Я пытаюсь сделать пользовательские формы редактирования для пользователя завещать, но когда я отправить форму оболочки бросить мне эту ошибку:Нет маршрута матчей [POST] «/ профиль/12/редактировать»

No route matches [POST] "/profile/12/edit" 

Вот моя форма:

= simple_form_for(:user), html: { method: :put }) do |f| 
= f.input :email 
= f.input :username 
= f.input :phone 
= f.input :password, autocomplete: "off", required: false 
= f.input :password_confirmation, required: false 
= f.input :current_password, required: true 
= f.button :submit, 'Update' 

Вот мой profile_controller

class ProfileController < ApplicationController 

    def show 
    @client = Client.find(params[:id]) 
    end 

    def edit 
    @user = User.find(params[:id]) 
    end 

    def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(params[:user]) 
     redirect_to root_path 
    end 
    end 
end 

И мой routes.rb:

Rails.application.routes.draw do 

    root 'home#index' 

    devise_for :users 
    resources :profile 

end 

Что я делаю неправильно?

+0

показать ваш routes.rb –

+0

обновление вопрос – wweare

+0

Пытались ли вы '' 'грабли routes''' видеть Вас доступные маршруты? – Renews

ответ

0

Заменить:

= simple_form_for(:user), html: { method: :put }) do |f| 

с:

= simple_form_for @user, method: :put, url: "/profile" do |f| 

Некоторые из ошибок:

  • , если вы хотите изменить объект, обеспечить его, а не просто символ

  • путь должен быть отрегулирован, чтобы указать на /profile

  • метода не HTML-свойств, он создает скрытое поле перехвачены рельсами, чтобы знать, принимаемый post следует понимать как put

  • мы чувствуем, как есть опечатка: контроллер должен быть множественным

0

Это, как я хотел бы сделать это:

= simple_form_for @user, 
    :url => url_for(:action => 'edit', :controller => 'profiles'), 
    :method => 'put' do |f| 

Здесь вы отправляете запрос PUT (update) к действию редактирования вашего ProfilesController.

Также обратите внимание на разницу между ProfileController и тем, что я написал ProfilesController. Соглашение в Rails и для DHH заключается в том, что имена ваших моделей должны быть уникальными, а ваш контроллер - множественным.

модель

class Profile < ActiveRecord::Base 
end 

контроллер

class ProfilesController < ApplicationController 
end 
+0

'update' не достигается с помощью' POST' - вы ошибочно заполняете 'профили' – apneadiving

+0

Woops.и нет, соглашение заключается в том, что имена контроллеров должны быть множественными, а модель единственная – Cyzanfar

+0

вы можете указать все условные обозначения, но проверить, что писал OP. :) – apneadiving

Смежные вопросы