轨道中的单数和复数活动记录查询有什么区别?



我在看一本书。我找不到我所面临的这种困惑的适当解释。我有一个名为行项的模型

class LineItem < ApplicationRecord
belongs_to :product
end

然后有一个名为"产品与方法"的模型

class Product < ApplicationRecord
has_many :line_items
def method_name
unless line_items.empty?
do #this
end
end
end

上述方法有一个line_items

然后有一个控制器。

app/controllers/line_items_controller.rb

def create
product = Product.find(params[:product_id])
@line_item = @cart.line_items.build(product: product)
###---
##
end

这里的line_items是怎么回事?我知道单数模型名称会生成为复数表名称。这就像直接在表而不是模型上查询一样。

line_items.empty?LineItem.empty?一样。有人可以解释一下吗?

这真的很简单,我们有模型名称单数,表名复数,但关联可以是单数或复数,具体取决于关联的记录数量。 例如。 用户有很多书。我们可以找到许多书籍,例如 => User.last.books 它将返回所有书籍。 图书属于用户。我们正在定义与书籍相关的单个用户。所以 Book.last.user

另一方面,如果您有单个对象与对象关联。然后就has_one了。例如。 用户has_one:帐户。因此,要获取我们调用的相关帐户。用户帐户不是用户帐户。

在您的情况下,我们有product has_many :line_items所以当您在创建方法product = Product.find(params[:product_id])中具有实例并触发product.line_items它将返回多个(如果有)line_items。

查看此处以深入了解关联。

line_items.empty?与LineItem.empty相同吗?。有人可以解释一下吗?

答案是否定的。他们之间的巨大差异 2.
object.line_items.empty?表示它们存在的任何line_item是否与对象相关联。 LineItem.empty?行项上的类方法是否可以执行空中的内容?如果已定义。通常,除非您明确定义它,否则这不存在。

最新更新