0

モデルのこの構造を持つレールの例を見る:

ここに画像の説明を入力

コードには次のものがあります。

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 クラスにどのように接続しますか? これら2つがどのように接続されているかを説明できれば素晴らしいでしょう.

4

1 に答える 1

2

そうです、「Rails マジック」が働いているのです。関連付けを定義すると (この場合は と を使用belongs_toしてhas_many、Rails は関連付けられたオブジェクトの名前に基づいて一連のメソッドを作成します。したがって、この場合、Product にはメソッド.line_itemsが追加され、Relation (基本的にはコードがその Relation で何かを実行すると、クエリが実行され、LineItem オブジェクトの配列が返されます。

@line_item.product = Product.find(3)これは、関連付けられたオブジェクトの割り当て ( ) や新しい関連付けられたオブジェクトの作成( ) などを実行するときに、Rails がユーザーの意図を認識している理由でもあります@product.create_line_item(:title => 'foo')

このガイドでは、さまざまな種類の関連付けによって作成されたメソッドのリストなど、詳細を説明します。

于 2013-01-21T16:19:43.410 に答える