看着鐵軌例如這種結構的模型:兩種模型如何訪問對方?
,並在代碼中,我們有:
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類?如果你能解釋這兩者如何連接在一起會很好。
啊我明白了。並且我們定義關聯例如hasmany:XYZ這個XYZ必須以Rails通過查看它的名字瞭解哪個控制器的方式命名?例如,我們有一個名爲line_items的控制器文件。因此,我們必須定義關聯名稱完全相同:line_items?感謝您的信息。 – Bohn
當你說'has_many:things'時,你會得到一個'.things'方法,一個'.create_thing'方法,以及所有其他的方法。默認情況下,符號(':things')與相關模型的名稱('Thing')匹配,但它們不需要 - 如果不指定'has_many',則可以使用參數指定類名比賽。如果你這樣做,這些方法基於符號而不是類名(因此關聯是'has_many:things',但類是實際的'Widget',該方法仍然是'.things' – MrTheWalrus