Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从rails中的嵌套资源进行路由?获得';ActiveRecord::RecordNotFound在UsersController#show';_Ruby On Rails_Ruby_Resources_Link To - Fatal编程技术网

Ruby on rails 如何从rails中的嵌套资源进行路由?获得';ActiveRecord::RecordNotFound在UsersController#show';

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

我有一个游戏界面,有一个链接可以返回到玩家的统计页面。我的测试用户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 = @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的情况下则不起作用