我有两个型号:
Customer
和Contact
Customers
表格中包含:id, :firstName, :lastName
列
Contacts
表格中包含:id, :cid, :hphone, :cphone
列
所以如果Customers表有数据
1 Josh McDonnel
然后联系人表格有相应的
5 1 947-245-2342 342-543-8585
我可以在这里使用哪些关联?
联系方式
belongs_to :customer, :foreign_key => "id", :class_name => "Customer"
客户课程应该有什么?
此外,如果我想要获得所有客户(find_byXXX
,firstName
以及相应的lastName
和hphone
),那么简单的cphone
将会如何? / p>
答案 0 :(得分:8)
记住一条规则:其中包含外键的表属于该外键引用的表。
答案 1 :(得分:4)
你很近,但你的belongs_to
应该是这个。 :foreign_key
应该是存储对主要ID的引用的字段的名称:
belongs_to :customer, :foreign_key => "cid"
在你的Customer.rb
课程中:
has_one :contact, :foreign_key => "cid"
最后,您的搜索可能如下所示:
@customers = Customer.all(:include => :contact)
然后你可以在视图的循环中使用它:
<% @customers.each do |customer| %>
<p>Name: <%= customer.firstName %> <%= customer.lastName %></p>
<p>Home: <%= customer.contact.hphone %></p>
<p>Work: <%= customer.contact.cphone %></p>
<% end %>
顺便提一下,如果您使用customer_id
代替cid
,那么您的关联就可以是:
#Contact.rb
belongs_to :customer
#Customer.rb
has_one :contact
答案 2 :(得分:1)
表的对象包含外键“belongs_to”不包含的对象。
如果客户has_one联系并联系belongs_to客户,那么外键(默认情况下为“customer_id”)将存在于联系人表格中。
您可能不希望使用“id”作为外键,因为“id”是为包含联系人ID的列保留的。也不需要指定类名,因为类的名称与关系的名称相同(在本例中为“customer”)。
客户会:
has_one :contact
联系方式:
belongs_to :customer
然后,如果您想找到某个客户的联系人,您可以致电:
@customer.contact
反之亦然。
关于find_by_XXX的其他问题有点模糊。如果您想查找名为“John”的所有客户,您可以使用:
@customers_named_john = Customer.find_by_firstName("John")
但我不确定这是你在问什么。