rails belongs_to has_one。需要一些解释

时间:2010-01-22 21:43:50

标签: ruby-on-rails associations

我有两个型号:

CustomerContact

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_byXXXfirstName以及相应的lastNamehphone),那么简单的cphone将会如何? / p>

3 个答案:

答案 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")

但我不确定这是你在问什么。