質問

私は、単純な書籍アプリをチェックアウトを構築しています。私がしなければならないことの一つは、ブックがチェックアウトされているかどうかです。私はbook_check_outクラスを介して、わたしの民とブッククラスのセットアップの間に私の関連を持っています。私の目標は、本は現在チェックアウトされているかどうかを判断するために、本のchecked_outプロパティを使用することです。しかし、この本をチェックアウトし、私はbook.checked_out.XXXを参照していないときに私の現在の実装では、私はエラーをreceieve「あなたはそれを期待していなかったとき、はあなたがnilオブジェクトを持っている!の」私の目標はありますそれが現在にチェックアウトされている方を示してはい、その本がチェックアウトされていることを示し、他のビューで一部のビューでは2つの目的のために使用する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
役に立ちましたか?

解決

あなたはブール結果、真または偽のいずれかであることができる何かを持っている場合は、(例えば、本はどちらかにチェックアウトできるか否か)、あなたは結果のデフォルトを想定する必要があります。この場合、我々は、(本は、デフォルトではチェックアウトされていない)、それは虚偽だと仮定することができます。

checked_out の行と同じ名前のメソッドを作成します:

本モデルでは、あなたののにhas_manyを削除する

def checked_out
  book_check_outs || false
end

このはBookCheckOutsのいずれかを返す必要があります、またはインスタンスに関連付けられてどれも、FALSEが存在しない場合。それはあなたの関連付けを確認すると厄介なnilのオブジェクトエラーを除去する迅速、簡単、確実な方法を提供します。

編集また、単にTRUEまたはFALSEを返す、とbook_check_outsがnilかどうかであることを確認することで、最新のチェックアウトを返すことができませんでした。 Railsは、ブランクと呼ばれる方法を提供しますか?これはnilの両方を呼び出しますか?空?

def checked_out
  !book_check_outs.blank?
end

私はルビーを愛する:)

他のヒント

それは実際に重要かどうかは忘れたが、明確さのために、あなたはhas_manyの上にhas_many関係を置きたいと思うかもしれません:。関係を通じて

BookCheckOuts、それにhas_one:

私はまた、あなたがそれにhas_manyことBookクラスで宣言されなければならないことを確認していないchecked_out、checked_out以来、の実際のあなたはそれが上記の多くを持つと宣言BookCheckOutです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top