对某些嵌套资源路由有些麻烦。我正在尝试做的是链接到用户的个人资料页面以进行编辑。在我看来,它写成:
<%= link_to "Edit Profile", edit_user_profile_path(current_user) %>
出了哪些错误:
No route matches {:action=>"edit", :controller=>"profiles", :user_id=>#<User id: 1, email: "EDITEDOUT", hashed_password: "EDITEDOUT", created_at: "2011-01-20 18:30:44", updated_at: "2011-01-20 18:30:44">}
在我的routes.rb文件中,它看起来像这样:
resources :users do
resources :profiles, :controller => "profiles"
end
我检查了我的Rake路线,它给了我这个有效选项:
edit_user_profile GET /users/:user_id/profiles/:id/edit(.:format) {:action=>"edit", :controller=>"profiles"}
我可以手动导航到。对于好的措施,这是我的控制器的证据:
class ProfilesController < ApplicationController
def edit
@user = current_user
@profile = current_user.profile
end
def update
@user = current_user
@profile = current_user.profile
respond_to do |format|
if @profile.update_attributes(params[:profile])
format.html { redirect_to(orders_path, :notice => "Your profile has been updated.") }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @profile.errors, :status => :unprocessable_entity }
end
end
end
end
无论如何,我一直有一些跟踪此问题的问题。任何指针都会有所帮助。对于我的数据库设计,配置文件属于一对一关系的用户。我希望这只是一种新鲜的东西,我没有注意到一组新的眼睛可能有所帮助。
答案 0 :(得分:2)
如果仔细查看自己的路线,就会发现它同时需要:user_id
和:id
。在这种情况下,后者是指用户个人资料。
为了告诉Rails你想要那个特定的个人资料,你必须在你的链接中同时指定用户和个人资料,如下所示:
edit_user_profile_path(current_user, @profile)
现在,Rails将使用路由的current_user
部分的第一个参数(:user_id
)和@profile
的第二个参数(:id
)。 / p>