Rails关联:创建特定于客户的订单

时间:2013-03-28 03:50:22

标签: ruby-on-rails ruby-on-rails-3 associations

我已经阅读了一些与此相关的帖子,它仍然没有点击给我。我有一个例子,我试图保持尽可能简单,以便我可以理解外键分配是如何进行的。

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

user.rb

Class User < ActiveRecord::Base
   has_many :microposts
end

micropost.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方法吗?
  • 如果模型被称为Customer,那么'current_customer'会工作吗?
  • 应用程序如何知道哪个用户正在创建微博? (这可能是一个愚蠢的方式来说出问题)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

<强>答案

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

  2. 不,因为该方法未由模型定义。 current_customer不起作用。有一些方法可以创建一个动态方法,给出一个具有其他名称的模型,例如Customer,您可以编写一个method_missing,它可以提供所需的输出,但这可能更适合它的用途。

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

  4. current_user的代码通常类似于

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

    这就是说找到一个先前存储在cookie中的remember_token用户,或者如果已经设置了@current_user则使用{{1}}。

    希望这有帮助!