2013-05-31 3 views
0

У меня есть две модели:Rails модели отношений, has_one или belongs_to

центров обработки данных:

class Datacentre < ActiveRecord::Base 

    has_one :provider 

end 

и Provider:

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

i t похоже, что он реагирует обратным образом?

Вид:

- 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 
+0

Проверьте столбец «datacentre_id» присутствует в таблице поставщиков или нет. –

+0

не должно быть столбца datacentre_id в таблице поставщиков, поскольку у провайдера может быть много центров обработки данных – user1738017

ответ

1

Ваши модели центров обработки данных должен выглядеть следующим образом:

class Datacentre < ActiveRecord::Base 
    belongs_to :provider 
end 

и она должна содержать provider_id.

Вы вид мог выглядеть

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

Вам нужно изменить has_one к belongs_to в Datacentre модуле. Надеюсь, это поможет!

+0

Я изменил это, но затем я получил эту ошибку: 'undefined method 'name' для nil: NilClass' – user1738017

+0

Проблема в этом line: '% td = c.provider.name' Вы пытаетесь найти« Datacentre »с колонкой поставщика, но вместо этого вам нужно найти имя« Provider »в таблице« providers »с« id == provider_id ». –

+0

, но я хочу показать все датацентры, даже если у них нет провайдера, связанного с ними. – user1738017

0

has_one и has_many оба находятся на стороне собственности отношений, но has_one указывает, что может быть только одна из вещей, принадлежащих собственности. Оба они должны иметь модель на другом конце отношения с belongs_to.

В вашем примере, вы сказали, что Datacentre владеет Провайдером и, что поставщик владеет Datacentre. Вместо этого должен быть Datacentre belongs_to Провайдер.

Вам также понадобится столбец provider_id в таблице Datacentre.

+0

Я изменил это, но затем я получил эту ошибку: 'undefined method 'name' для nil: NilClass' – user1738017

Смежные вопросы