Ruby on rails 如何从rails中的嵌套资源进行路由?获得';ActiveRecord::RecordNotFound在UsersController#show';
我有一个游戏界面,有一个链接可以返回到玩家的统计页面。我的测试用户id为0,我的id为1 因此,游戏界面的url是Ruby on rails 如何从rails中的嵌套资源进行路由?获得';ActiveRecord::RecordNotFound在UsersController#show';,ruby-on-rails,ruby,resources,link-to,Ruby On Rails,Ruby,Resources,Link To,我有一个游戏界面,有一个链接可以返回到玩家的统计页面。我的测试用户id为0,我的id为1 因此,游戏界面的url是/users/0/mines/1 从“游戏性”返回到“玩家统计”的按钮如下所示: <%= link_to "Home", user_path, id: 'link-to-hq' %> # This is 'Headquarters', HQ... def show @user = User.find(params[:id]) @mine = @use
/users/0/mines/1
从“游戏性”返回到“玩家统计”的按钮如下所示:
<%= link_to "Home", user_path, id: 'link-to-hq' %>
# This is 'Headquarters', HQ...
def show
@user = User.find(params[:id])
@mine = @user.mines.first
@tool = Tool.find(@user.tool_id)
end
private
def find_user
@user = User.find(params[:id])
end
(这是我的用户控制器中的私有查找用户方法。)
出于某种原因,它正在获取矿山id(1的),而不是用户id(0的)
im使用的路线如下所示:
user GET /users/:id(.:format) users#show
我的控制器如下所示:
<%= link_to "Home", user_path, id: 'link-to-hq' %>
# This is 'Headquarters', HQ...
def show
@user = User.find(params[:id])
@mine = @user.mines.first
@tool = Tool.find(@user.tool_id)
end
private
def find_user
@user = User.find(params[:id])
end
(我有一个before\u操作:find\u user:show)
当从游戏中返回到用户统计信息时,我是否需要创建一个自定义路径来获取该用户Id?
如何获取正确的id?您应该具备:
@user = User.find(params[:user_id])
在你的控制器里 请详细说明
@Marek Lipka
的答案。如果您在终端中运行rake路由,您可以看到您的路由类似于:
/users/:user_id/mines/:id => mines#show
因此,在您的控制器中,当您执行params[:id]
时,它查找的是矿山id,而不是用户id。因此,在您的方法中,您应该
def find_user
@user = User.find(params[:user_id]) #this will give you the user with id 0
end
还注意到您在show action中做了一些错误的事情,因为您在show action中找到了作为Prefore筛选器的@user,所以您不需要在show action中再次设置@user而且如果您想显示正确的我,那么您应该使用params[:id]找到它,因此在show action中,您的代码应该如下所示:
def show
@mine = Mine.find(params[:id]) #this will show mine with id 1 or whichever id you'll pass in url
@tool = Tool.find(@user.tool_id)
end
我无法更改查找用户的方式,因为在我的程序的其他部分中,我使用以下方法查找用户:
@user=user.find(参数[:id])
我发现在我的link_中指定@user退出游戏状态解决了这个问题:
带我去
/users/0
这与您发布的url完全不同。这将把你带到“用户秀”上,而你发布的有问题的url将把你带到“地雷秀”上。当您有类似于/users/0的url时,这将起作用,但在/users/0/1的情况下则不起作用