Rails 4验证关联的模型ID

时间:2015-04-30 01:26:44

标签: ruby-on-rails ruby activerecord models

假设我有一个模型Book

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

我如何修复一个nil异常我正在某处,NoMethodError未定义方法library用于nil:NilClass当我执行book.library之类的操作时?

或者换句话说,如何在将图书链接到图书馆之前确保library_id不是nil并且它存在于数据库中? validates :library_id, presence: true不应该解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

您已验证了library_id。这对书本来说已经足够了。 您需要做的是确保无法删除具有书籍的图书馆。

以下是一个例子:

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 :(得分:1)

在致电UniqueCode: 1234 之前,请先检查book.library 或者将依赖的破坏添加到Book model book.library if book.library

答案 2 :(得分:1)

在致电nimcache之前,您应该检查书籍:

book.library