我在查看应用中的其他用户时遇到问题

时间:2014-08-19 07:03:01

标签: ruby-on-rails

在我的应用程序的用户控制器中,我有一种方法可以查看用户生成的帖子,但是当您转到索引页面并单击其他用户时,当前登录用户的页面会显示,但网址是对于我刚刚点击的用户。

这是我的用户控制器中的方法

def feed
  @title = "Feed"
  @user = User.find(session[:user_id]) # This is the problem
  feed = Feed.new(@user)

render 'show_feed'
end

我也无法理解session [:user_id]和params [:id]之间的区别。如果我在页面上将会话[:user_id]更改为params [:id],我刚刚点击的用户,则会显示他们的帖子,但当我回到登录用户的页面时,我会得到错误"找不到具有' id' = user_id"的用户in" app / controllers / users_controller.rb:59:在`feed'"所以我的问题是,我需要传递给@user = User.find()才能获得正确生成的页面?

2 个答案:

答案 0 :(得分:1)

session是数据(通常存储在cookie中),它从一个请求持久存储到另一个请求,并在浏览器会话结束时到期。常见的用途是存储登录用户的ID。

通过将其传递给User.find,您完全忽略了URL中的用户ID。您应该使用params[:id](除非您的路线以不同的方式命名您网址的这一部分)

当你“回去”时你的问题对我来说并不清楚(我甚至无法判断我们是否在讨论相同的控制器操作)但猜测该页面的URL中没有id ,或路由调用它是别的东西,或者(这有点乱)你打算在URL中没有id时回退到当前用户,在这种情况下你需要使用params[:id]session[:user_id]取决于那里有什么。

答案 1 :(得分:1)

通常,如果您点击链接以查看其他用户,则该链接中嵌入了“id”,并在params中传递,因此您可以这样做...

@user = User.find(params[:id])

返回登录用户的链接不正确,但您没有显示该链接。它应该很像是

<%= link_to user_path(session[:user_id]) %>

根据您对问题的描述,您可能会......

<%= link_to user_path('user_id') %>

...这没有意义......它意味着字面上转到id为“user_id”的用户记录