可以从普通的资源丰富的URI编辑用户,例如:
/users/1/edit
问题是在我的应用程序中,编辑用户页面是主页或根路径。
# routes.rb
root :to => "users#edit"
因此,在没有@user
的情况下,我尝试将params[:id]
设置为当前用户。
# app/controllers/users_controller.rb
def edit
@user = (params[:id]) ? User.find_by_id(params[:id]) : @current_user
end
不幸的是,我无法正确地指出表单。
# app/views/shared/_manage_users.rb
<%= form_tag follow_user_path, :id => 'update-following-form' %>
我得到了:
No route matches {:action=>"follow", :controller=>"users"}
follow
是用户资源的成员路由,具有相应的控制器方法。如果我通过此问题顶部的URI /users/1/edit
访问该页面,一切正常,并且不会引发任何错误。
我不确定我是否会以完全错误的方式解决这个问题,或者我是不是使用了正确的表单助手或者愚蠢的东西。 如何解决此问题,或者我可以遵循哪些步骤进行调试?
答案 0 :(得分:2)
成员路由期望成员作为参数传递。您的路线期待用户,如下所示:
follow_user_path(@user)
答案 1 :(得分:1)
执行此操作
resource :user
而不是
resources :users
现在id param不在url中。您只需要确保用户已登录
答案 2 :(得分:1)
我认为您需要在routes.rb中实际定义follow_user。
示例:
发布“user / follow”=&gt; “用户#follow”,:as =&gt; :follow_user