新行动不起作用

时间:2009-07-28 05:09:16

标签: ruby-on-rails routing action

我有一个标准的用户控制器,其中包含正常的操作集(索引,显示,新建,编辑等),我正在尝试添加一个名为“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'

所以我真的有两个问题:

  1. 为了启用新动作,我该怎么做?
  2. 为什么现有路线不能涵盖这种情况?其他仅包含控制器和动作的网​​址工作正常(例如http://localhost:3000/users/new)。为什么不这个?它不应该只评估:controller = users,:action = profile,:id = nil?

5 个答案:

答案 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' 

当您想要访问个人资料页面时,请使用以下网址

http://localhost:3000/profile

确保登录后,您处理会话并将用户ID存储在会话变量中。

祝你好运!