【问题标题】:Getting current_user's id in model在模型中获取 current_user 的 id
【发布时间】:2013-03-08 18:56:37
【问题描述】:

如果这是一个新手问题,请原谅我,但我想知道他们如何在此处的用户模型中获得当前用户的 ID:
Listing 10.39 我已经尝试一遍又一遍地阅读它,但我仍然无法弄清楚:(

class User < ActiveRecord::Base
  .
  .
  .
  def feed
    # This is preliminary. See "Following users" for the full implementation.
    Micropost.where("user_id = ?", id)
  end
  .
  .
  .
end

【问题讨论】:

    标签: ruby-on-rails activerecord rails-activerecord railstutorial.org rails-models


    【解决方案1】:

    feed 是一个实例级别的方法,所以self 将拥有用户对象。所以id 等价于self.id

    例如: 假设您在 User 模型中有 user_method

    def user_method
      puts self  #prints user object
      puts self.id #prints user id
      puts id #prints user id
    end
    
    user = User.create(user_attributes)
    user.user_method
    

    类似地,feed 被一些 user 对象调用。

    【讨论】:

    • 我还是不明白 :( Feed 是类 User 的实例方法(我得到),它扩展了 ar base。我相信“self”有点像 php 中的“this”,对吧?为什么self 有当前用户的对象吗?
    • 哦,谢谢,没有看到您的编辑。是的,我现在了解自我部分。如果我是当前的,那么当您执行 User.create 或进行身份验证时,类 User 会存储对象吗?还有一个问题,我可以在另一个模型中获得 id 吗?
    • @Skyalchemist id 什么?
    • 让我试一试...当您调用 feed 时,您是在一个对象上调用它,该对象是 User 类的实例 this object 响应 id 也是如此。当您调用 id 时,在 feed 内部实际上是在调用 self.id ,而 self 是您调用 feed 的对象。 id 是在创建 db 表时 rails 自动添加的表列。它的独特之处。
    • @Skyalchemist 方法 feeduser 模型中。因此,self 将拥有用户对象而不是 micropost 对象。而current_user 是在用户成功登录时由您在应用程序级别或控制器级别的身份验证方法设置的。他们在控制器的某个地方调用current_user.feed,所以 current_user 有一些用户对象。你可以在任何用户对象上调用feed,我的意思是它不需要总是current_user
    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多