0

查看具有此结构的模型的 rails 示例:

在此处输入图像描述

在我们的代码中:

class LineItem < ActiveRecord::Base
  belongs_to :product
  belongs_to :cart
  attr_accessible :cart_id, :product_id
end

在“产品”类的模型中有一个方法定义如下:

class Product < ActiveRecord::Base

has_many :line_items

  private

    # ensure that there are no line items referencing this product
    def ensure_not_referenced_by_any_line_item
      if line_items.empty?
        return true
      else
        errors.add(:base, 'Line Items present')
        return false
      end
    end

那么,我们甚至在哪里定义了我们正在使用的 line_items,比如 :line_items?它怎么知道它指的是什么?它是否知道基于一些命名约定的魔法?它如何将此 :line_items 连接到 LineItems 类?如果你能解释这两者是如何连接在一起的,那就太好了。

4

1 回答 1

2

是的,这就是“Rails 魔法”的作用。当您定义关联时(在本例中使用belongs_toand has_many,Rails 会根据关联对象的名称创建一堆方法。因此,在本例中,Product.line_items添加了一个方法,该方法返回一个 Relation(基本上是一个表示数据库查询的对象)。当代码对该关系执行某些操作时,它会执行查询并返回 LineItem 对象的数组。

这也是 Rails 在您执行分配关联对象 ( @line_item.product = Product.find(3)) 或创建新关联对象 ( @product.create_line_item(:title => 'foo')) 等操作时知道您的意思的原因。

本指南提供了详细信息,包括各种关联创建的方法列表。

于 2013-01-21T16:19:43.410 回答