Form_for error - маршрут не найден - PullRequest
0 голосов
/ 12 января 2012

Я пытаюсь обновить настройки моего профиля, используя флажки на странице настроек.После того, как флажок установлен, я хочу перенаправить на страницу настроек, поэтому я добавил новое действие в мой контроллер, которое обновляет профиль, но перенаправляет на настройки.Однако я получаю следующую ошибку:

`No route matches {:action=>"edit_settings", :controller=>"profiles"}`

Вот мой код form_for:

<%= form_tag({:action => "edit_settings", :controller => "profiles"}, :html => {:multipart => true }) do |f| %>

Мое edit_settings действие в моем profiles контроллере:

def edit_settings
  @profile = user.profile
  if @profile.update_attributes(params[:profile])
    redirect_to settings_path, :notice => 'Updated user information successfully.'
  else
    render :edit
  end
end

Внутри моего routes.rb файла:

resources :profiles do
  post :edit_settings
end

Внутри rake routes:

profile_edit_settings  POST  /profiles/:profile_id/edit_settings(.:format)        {:action=>"edit_settings", :controller=>"profiles"}

1 Ответ

2 голосов
/ 12 января 2012

Вы создаете действие члена: edit_settings, а действия члена в ресурсах требуют идентификатора. Если вы проверите вывод «rake route», вы увидите, что он выдает «/ profile /: profile_id / edit_settings», и там отсутствует параметр: profile_id.

Это можно исправить, изменив параметры формы на {:action => "edit_settings", :controller => "profiles", :profile_id => @profile.id}.

В любом случае, если эта функция контроллера предназначена для обновления текущего профиля пользователя и только для этого (при условии, что этот контроллер не позволит обновлять профили других пользователей), лучшим вариантом, вероятно, будет отдельный ресурс ( http://guides.rubyonrails.org/routing.html#singular-resources). Таким образом, вам не нужно будет передавать параметр :profile_id.

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