문제

간단한 책 체크 아웃 신청서를 작성하고 있습니다. 내가해야 할 일 중 하나는 책이 체크 아웃되었는지 확인하는 것입니다. Book_check_out 클래스를 통해 내 사람들과 책 수업 사이의 연관성이 있습니다. 내 목표는 책의 Checked_out 속성을 사용하여 책이 현재 체크 아웃되었는지 확인하는 것입니다. 그러나, 책이 체크 아웃되지 않았을 때의 현재 구현에서, 나는 참조 책을 참조합니다 .Checked_out.xxx 나는 오류를받습니다. "당신이 그것을 기대하지 않았을 때 당신은 nil 객체를 가지고 있습니다!"나의 목표는 몇 가지 관점에서 두 가지 목적으로 Book.checked_out을 사용하는 것입니다. 예, 그 책이 체크 아웃되고 다른 견해로는 현재 누가 확인되었는지 보여줍니다.

class Person < ActiveRecord::Base
  has_many :book_check_outs
  has_many :books, :through => :book_check_outs
end

class Book < ActiveRecord::Base

  has_many :book_check_outs
  has_many :people, :through => :book_check_outs

  def checked_out
    book_check_outs || false
  end
end

class BookCheckOut < ActiveRecord::Base
  belongs_to :book
  belongs_to :person
end
도움이 되었습니까?

해결책

부울 결과, 참 또는 거짓일 수있는 것 (예 : 책이 체크 아웃 될 수 있음)이 있으면 결과에 대한 기본값을 가정해야합니다. 이 경우 거짓이라고 가정 할 수 있습니다 (책은 기본적으로 체크 아웃되지 않음).

책 모델에서 제거하십시오 has_many : checked_out 동일한 이름의 메소드를 줄이고 만듭니다.

def checked_out
  book_check_outs || false
end

이것 ~해야 한다 BookCheckouts를 반환하거나 인스턴스와 관련이없는 경우, False. 그것은 당신에게 연관성을 확인하고 불쾌한 객체 오류를 제거하는 빠르고 쉽고, 완벽한 방법을 제공합니다.

편집하다 당신은 또한 true 또는 false를 반환 할 수 있으며, book_check_outs가 nil인지 아닌지 확인하여 최신 체크 아웃을 반환 할 수 없습니다. Rails는 Blank라는 방법을 제공합니까? NIL을 모두 호출합니까? 그리고 비어?

def checked_out
  !book_check_outs.blank?
end

나는 루비를 사랑한다 :)

다른 팁

그것이 실제로 중요하지 않은지 잊어 버리지만 명확성을 위해 Has_many 관계를 Has_many 위에 올려 놓고 싶을 수도 있습니다.

또한 책 클래스에서 has_many : bookcheckouts 및 has_one : checked_out을 선언해야할지 확신하지 못합니다. 실제로 위의 많은 것을 가지고 있다고 선언 한 책 체크 아웃입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top