我正在尝试使用设置页面中的复选框更新我的个人资料设置。单击复选框后,我想重定向到设置页面,因此我向控制器添加了一个新操作,用于更新配置文件但重定向到设置。但是,我收到以下错误:
`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"}
答案 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
参数。