0

所以昨天我问了一个关于为当前用户获取项目的问题。好吧,我遇到了一个问题。在这里看到那个线程。所以今天我正在为用户显示类别和任务以及任何讨论。当我加载页面以查看此内容时,我得到了:

NoMethodError in UsersController#show

undefined method `projects' for #<User:0xad5823f4>
Rails.root: /home/adam/Documents/Aptana Studio 3 Workspace/StartPoint

Application Trace | Framework Trace | Full Trace
app/controllers/users_controller.rb:25:in `show'
Request

Parameters:

{"id"=>"4"}

这是目前我的 users#show 方法中的内容:

  def show
    @projects = current_user.projects
    @tasks = current_user.tasks
    @categories = current_user.categories
    @discussions = current_user.discussions
  end

表名是项目、任务、类别和讨论。我在其他任何地方都没有问题,为什么我会看到这个错误?

如果您需要更多代码,我可以展示它。错误很明显,但我再次使用这种类型的调用来显示项目特定信息,例如项目类别或任务。这可能与我的用户与类别、讨论、任务等之间的关系有关吗?因为我确实在 show 方法中列出的每个表中都有 user_id 等等。

我也想到了这一点,今天早上开始讨论这个话题:current_user 似乎是错误的,因为如果我点击 Bobs 个人资料,我会看到我所有的东西,不是吗?它不应该是更特定于用户 ID 的东西吗?

4

1 回答 1

0

您是否在每个模型中建立了关联?

class User < ActiveRecord::Base
  has_many :projects
end

还要确保它current_user实际上是一个用户对象,而不是一些瘦代理。

一般需要区分会话用户和显示用户。这就是为什么喜欢的名字current_user是有害的。我建议使用session_user来指代登录用户并@user指代正在显示的用户。

一些登录系统只定义了一个current_user方法,但是给它起别名并不难。在这种情况下,它只是设计上有缺陷。

于 2012-11-22T16:02:10.277 回答