2015-04-30 6 views
0

Скажем, у меня есть модель BookRails 4 Validating связанная модель ID

class Books < ActiveRecord::Base 
    belongs_to :library 
    has_many :pages 
    validates :library_id, presence: true 
end 

и модель Library

class Library < ActiveRecord::Base 
    has_many :books 
    belongs_to :city 
end 

Как я могу исправить ноль исключение я получаю где-то, NoMethodError неопределенный метод library для nil: NilClass, когда я делаю что-то вроде book.library?

Или, другими словами, как я могу убедиться, что перед связыванием книги с библиотекой, library_id не nil и он есть в базе данных? Разве это не должно решить validates :library_id, presence: true?

+0

Так здорово, что я даже не знал, что вы можете получить такой родительский объект. Да, он должен работать, как вы говорите. Можете ли вы предоставить код и конкретное сообщение об ошибке с номером строки? –

+0

Вы также можете использовать 'validates_presence_of: library_id'. Я бы также добавил в библиотеку предложение destroy: 'has_many: books, depend:: destroy' –

ответ

1

Вы подтвердили библиотеку_ид. Этого достаточно для книг. Что вам нужно сделать, так это убедиться, что библиотеки, в которых есть книги, нельзя удалить.

Вот пример:

def destroy 
    @library = Library.find params[:id] 
    if @library.books.blank? 
    @library.destroy 
    redirect_to libraries_path 
    else 
    redirect_to library_path(@library) 
    end 
end 
1

Перед вызовом book.library сделать проверку book.library if book.library Или добавить зависимый уничтожить в книге модели has_many :books, dependent: :destroy

1

Перед вызовом book.library, Yous hould сделать проверку на книгу:

book.library if book