Rails模型关系,has_one或belongs_to

时间:2013-05-31 09:52:05

标签: ruby-on-rails model relational-database

我有两种模式:

数据中心:

class Datacentre < ActiveRecord::Base

  has_one :provider

end

和提供者:

class Provider < ActiveRecord::Base

  has_many :datacentres

end

并且在数据中心表中我有provider_id但是当我尝试在视图中显示它时,我得到了这个:Mysql2::Error: Unknown column 'providers.datacentre_id' in 'where clause': SELECT 'providers'.* FROM 'providers' WHERE 'providers'.'datacentre_id' = 262 LIMIT 11

似乎它正在以相反的方式作出反应?

查看:

- Datacentre.find(:all, :order => " name ASC, country ASC", :conditions => "").each do |c|

  %tr
    %td= c.name
    %td= c.provider.name
    %td= c.country
    %td
      = c.address            
      = c.postcode

3 个答案:

答案 0 :(得分:1)

您的数据中心模型应如下所示:

class Datacentre < ActiveRecord::Base
  belongs_to :provider
end

,它应包含provider_id

你认为可以像

一样
- Datacenter.order([:name, :country]).each do |c|
...

答案 1 :(得分:0)

您需要在has_one模块中将belongs_to更改为Datacentre。希望它会有所帮助!

答案 2 :(得分:0)

has_onehas_many都在关系的所有权方面,但是has_one指定只能拥有其中一个拥有的东西。他们俩都应该在与belongs_to的关系的另一端有一个模型。

在您的示例中,您已说过数据中心拥有提供商拥有数据中心的提供商。它应该是数据中心belongs_to提供者。

您还需要在Datacentre表中添加provider_id列。