我有一個表格,其中primary_address_id
和delivery_address_id
列引用包含街道地址的表中的行。我想創建模型ActiveRecord的,所以我可以寫ActiveRecord:如何引用同一類別的兩個FK
ci = Contact.create(full_name: 'Willy', company: 'Chocolate Factory')
pa = ci.primary_address.create(street: 'Seestrasse', city: 'Kilchberg')
da = ci.delivery_address.create(street: 'Flughafenstrasse', city: 'Zurich')
(基本上,我想實現類似的功能an example on RoR guides)
contact.rb:class Contact < ActiveRecord::Base
belongs_to :primary_address, :class_name => 'Address'
belongs_to :delivery_address, :class_name => 'Address'
end
address.rb:
class Address < ActiveRecord::Base
end
當我嘗試從上面的示例運行ci.primary_address.create
時,我得到:
...activemodel-5.0.0.1/lib/active_model/attribute_methods.rb:433:in `method_missing': undefined method `create' for #<Address:0x007f8ef9132128> (NoMethodError)
from /.../main.rb:16:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
我想知道我的模型是否有意義,爲什麼create方法不可用?
我在Rails之外使用ActiveRecord。
CREATE TABLE contacts
(
id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
name VARCHAR(20),
company VARCHAR(20),
primary_address_id INT(11),
delivery_address_id INT(11),
CONSTRAINT primary_address_fk FOREIGN KEY (primary_address_id) REFERENCES addresses (id) ON DELETE SET NULL,
CONSTRAINT delivery_address_fk FOREIGN KEY (delivery_address_id) REFERENCES addresses (id) ON DELETE SET NULL
);
CREATE TABLE addresses
(
id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
street VARCHAR(40),
city VARCHAR(20),
);
你確定這是你的代碼是什麼樣子becasue它實際上是調用'create_other'這是不是'Address'所以我假定缺少的東西在這裏的方法。 – engineersmnky
@engineersmnky你是對的,我修飾了代碼併發布了另一條錯誤消息。我已糾正它。 –