1

我已经阅读了很多与此相关的帖子,但它仍然没有为我点击。我有一个示例,我试图使其尽可能简单,以便我可以理解如何进行外键分配。

假设我们有 2 个模型...

用户.rb

Class User < ActiveRecord::Base
   has_many :microposts
end

微博.rb

Class Micropost < ActiveRecord::Base
   belongs_to :user
end


我在 microposts_controller 的另一篇文章中找到了一些代码...

def create
   @micropost = current_user.microposts.build(params[:micropost])
   if @micropost.save
     ...
   else
     ...
   end
end

问题

  • 'current_user' 是 rails 方法吗?
  • 如果模型被称为客户,'current_customer' 会起作用吗?
  • 应用程序如何知道哪个用户正在创建微博?(这可能是一个愚蠢的方式来表达这个问题)
4

2 回答 2

0

答案

  1. Nocurrent_user不是 Rails 方法。它由一些身份验证框架提供,并且大多数应用程序都实现了一个current_user帮助方法,该方法返回通常在会话或实例变量上设置的当前用户。

  2. 不,因为该方法不是由模型定义的。current_customer行不通。有一些方法可以使用动态方法来给定具有另一个名称的模型,例如Customer您可以编写一个 method_missing 来提供所需的输出,但这对于将要使用的内容可能需要做更多的工作。

  3. 回到问题 1。该方法current_user将返回一个实例,User该实例是当前登录的用户,那么结果将类似于@current_user.microposts.build

current_user 的代码通常看起来像

def current_user
  @current_user ||= User.find_by_remember_token(cookies[:remember_token])
end

这几乎是说找到一个remember_token以前存储在 cookie 中的用户,或者使用@current_user已经设置的 if。

希望这可以帮助!

于 2013-03-28T04:07:51.360 回答
0

current_user通常由像 Devise 这样的身份验证框架提供。它可以通过查看登录时创建的会话来确定该用户。是的,如果至少使用 Devise 创建了一个名为 Customer 的模型,那么 current_customer 将在“客户”登录后工作。

于 2013-03-28T03:54:00.297 回答