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

Posted

技术标签:

【中文标题】Rails 关联:创建特定于客户的订单【英文标题】:Rails Associations: Creating Orders specific to a Customer 【发布时间】:2013-03-28 03:50:21 【问题描述】:

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

假设我们有 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' 会起作用吗? 应用程序如何知道哪个用户正在创建微博? (这可能是一种愚蠢的表达问题的方式)

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

答案

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

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

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

current_user 的代码通常看起来像

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

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

希望这会有所帮助!

【讨论】:

以上是关于Rails 关联:创建特定于客户的订单的主要内容,如果未能解决你的问题,请参考以下文章

业务受理需求 客户下单 根据前台页面所选的省市区 关联定区去生成订单

使用 Rails 6,您将“特定于页面”的 JavaScript 代码放在哪里?

Rails 3.1 资产管道:如何加载特定于控制器的脚本?

Hibernate的一对多关联关系

k3中,预收单为啥不能和销售发票、其他应收单进行关联啊?

提高 Rails 视图渲染的性能