2011-01-19 2 views
0

дорогие разработчики У меня есть некоторые проблемы с Rails модели Вот мой SQL таблицыRuby On Rails модели объединения nubie вопрос

create_table "areas", :primary_key => "ndc", :force => true do |t| 
    t.string "townname", :limit => 256, :null => false 
    end 

    create_table "books", :primary_key => "ndc", :force => true do |t| 
    t.integer "booked", :null => false 
    t.integer "free", :null => false 
    end 



class Book < ActiveRecord::Base 
    self.primary_key = "ndc" 
    has_one :area, :foreign_key => 'ndc' 
end 

class Area < ActiveRecord::Base 
    self.primary_key = "ndc" 
    belongs_to :book , :foreign_key => 'ndc' 
end 

в контроллере у меня есть такой код

@books = Book.paginate :page => params[:page] || 1, :per_page => 10 
    @books.each do |booking| 
     p booking.area 
     p booking 

    end 

В производственном режиме Безразлично» т работа, бронирование.аре не нулевой объект. что это может быть?

Площадь becames ноль, если config.cache_classes = истинная

так booking.area генерирует такие запросы , если cashe_classes = истина
ВЫБОР areas. * ОТ areas ГДЕ (areas .ndc = NULL) ЛИМИТ 1 , но без обналичивание классы ВЫБРАТЬ areas * FROM areas WHERE (areas .ndc = 30) LIMIT 1

ОСНОВНОЙ удалением belongs_to:. книга,: foreign_key => 'NDC' ф класса.

+0

Я добавил self.primary_key = "ndc" к классу книги и ассоциации, похоже, сейчас работает. Спасибо – Fivell

+1

Да, в любое время, когда вы используете имя, отличное от «id» для вашего основного поля ключа, вы должны вставить инструкцию в свой класс ActiveRecord, указав этот первичный ключ. –

+0

ok Я обновил свой вопрос – Fivell

ответ

2

Для таблицы areas требуется целое поле book_id, которое соответствует первому ключу таблицы книг.

+0

thnks, в этом случае книги должны обладать area_id, но если нет, я не могу использовать ассоциацию, если я ovveride foreign_key? – Fivell

+0

Вы можете это сделать, но тогда оператор has_one должен находиться в вашем классе Area, а свойство принадлежит_to должно быть в вашем классе Book (ожидается, что класс с оператором belongs_to имеет поле XXX_id, ссылающееся на класс has_one). Кроме того, вы действительно можете захотеть, чтобы класс Areas имел оператор has_many, а не оператор has_one - если предположить, что несколько книг могут принадлежать области? –

+0

Я понял это, thnks. Вопрос следующий: нет ли способа связать их по полю ndc, не создавая дополнительный столбец? – Fivell

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