我有一个标准的用户控制器,其中包含正常的操作集(索引,显示,新建,编辑等),我正在尝试添加一个名为“profile”的新操作。我添加了以下代码:
def profile
@user = User.find(session[:user_id])
end
我还为动作创建了一个新视图(app / views / users / profile.html.erb),但每当我尝试查看该页面时,我都会收到错误:
ActiveRecord::RecordNotFound in UsersController#show Couldn't find User with ID=profile ...
显然它正在击中节目动作。我猜这意味着我需要在我的路线上添加一些东西以使其工作,但我不知道是什么。到目前为止,我只有两个默认路由和我取消注释的map.root行:
map.root :controller => "home"
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
所以我真的有两个问题:
答案 0 :(得分:1)
尝试在routes.rb文件中输入类似的内容:
map.user_profile '/users/:id/profile', :controller => "users", :action => 'profile', :conditions => {:method => :get}
我认为可能之所以这样做是因为你没有匹配任何一个默认值,因为你没有设置:id(即使它检测到你的动作是id)。我不知道您的网址是什么样的,但我觉得如果您尝试http://localhost:3000/users/123124124/profile,即使没有路线中的新线,也可以工作。
答案 1 :(得分:0)
您是否有意尝试从会话[:user_id]而不是params [:id]获取ID?这应该是显示公开个人资料吗?
答案 2 :(得分:0)
您确定第一次加载页面时会话是否包含user_id?
答案 3 :(得分:0)
很难说没有看到所有的代码,但我的猜测可能有些奇怪,因为你的模型和控制器有相同的名称。在更改其他任何内容之前,我会尝试重命名控制器(请记住也要更改views / users目录的名称)。
另请参阅此其他堆栈溢出帖子:Rails cannot find model with same name as Ruby class
远射可能。
答案 4 :(得分:0)
解决您的问题的方法配置您的routes.rb,以便将id作为参数传递。
在routes.rb中配置如下
map.profile '/profile/:id',:controller=>'users',:action=>'profile'
当您想要访问个人资料页面时,请使用以下网址
确保登录后,您处理会话并将用户ID存储在会话变量中。
祝你好运!