Form_for错误 - 没有路由匹配帖子

时间:2012-01-12 01:32:33

标签: ruby-on-rails-3 forms

我正在尝试使用设置页面中的复选框更新我的个人资料设置。单击复选框后,我想重定向到设置页面,因此我向控制器添加了一个新操作,用于更新配置文件但重定向到设置。但是,我收到以下错误:

`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 个答案:

答案 0 :(得分:2)

您正在创建成员操作:edit_settings,资源下的成员操作需要ID。如果你检查“rake routes”输出,你会看到它给你“/ profiles /:profile_id / edit_settings”,并且那里有缺少的:profile_id参数。

您可以通过将表单参数更改为{:action => "edit_settings", :controller => "profiles", :profile_id => @profile.id}来解决此问题。

在任何情况下,如果此控制器功能是更新当前用户配置文件,并且仅(假设此控制器不允许更新其他用户配置文件),则单个资源可能是更好的解决方案({{3 }})。这样您就不需要传递:profile_id参数。