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 关联:创建特定于客户的订单的主要内容,如果未能解决你的问题,请参考以下文章
业务受理需求 客户下单 根据前台页面所选的省市区 关联定区去生成订单