0

私は最初のアプリを作成する初心者であり、一部の Ruby 愛好家から、私のコーディング方法は効率的ではないと言われました。きれいな状態になるのは大変な作業なので、自分にとって良いことを確実に行いたいです。

次のコードでは、メソッドを使いすぎていると思いますhas_manyか?もしそうなら、どのように置き換える必要がありますか?

class Product < ActiveRecord::Base

  # Offerers
  has_many :ownerships, dependent: :destroy 
  has_many :owners, through: :ownerships,
                      source: :offerer

  # Seekers
  has_many :loans, dependent: :destroy
  has_many :borrowers, through: :loans,
                     source: :seeker



  # Owners
  has_many :previous_ownerships, -> { where 'owning_date IS NOT NULL AND giving_date IS NOT NULL', agreed: true },
                                 class_name: 'Ownership'
  has_one :current_ownership, -> { where current: true, agreed: true },
                             class_name: 'Ownership'
  has_many :next_ownerships, -> { where owning_date: nil, giving_date: nil },
                             class_name: 'Ownership'

  has_many :previous_owners, through: :previous_ownerships,
                             source: :offerer
  has_one :owner, through: :current_ownership,
                  source: :offerer
  has_many :next_owners, through: :next_ownerships,
                         source: :offerer


  # Borrowers
  has_many :previous_loans, -> { where 'return_date IS NOT NULL AND borrowing_date IS NOT NULL', agreed: true },
                            class_name: 'Loan'
  has_one :current_loan, -> { where current: true, agreed: true },
                               class_name: 'Loan'
  has_many :next_loans, -> { where borrowing_date: nil, return_date: nil },
                                  class_name: 'Loan'

  has_many :previous_borrowers, through: :previous_loans,
                                source: :seeker
  has_many :next_borrowers, through: :next_loans,
                            source: :seeker
  has_one :borrower, through: :current_loan,
                              source: :seeker

 # Agreed or refused owners
  has_many :agreed_ownerships, -> { where agreed: true, owning_date: nil, giving_date: nil },
                                 class_name: 'Ownership'
  has_many :possible_ownerships, -> { where agreed: nil, owning_date: nil, giving_date: nil },
                                 class_name: 'Ownership'
  has_many :refused_ownerships, -> { where agreed: false, owning_date: nil, giving_date: nil },
                                 class_name: 'Ownership'
  has_many :agreed_owners, through: :agreed_ownerships,
                             source: :offerer
  has_many :possible_owners, through: :possible_ownerships,
                             source: :offerer
  has_many :refused_owners, through: :refused_ownerships,
                             source: :offerer

  # Agreed or refused borrowers
  has_many :agreed_loans, -> { where agreed: true, borrowing_date: nil, return_date: nil },
                                 class_name: 'Loan'
  has_many :possible_loans, -> { where agreed: nil, borrowing_date: nil, return_date: nil },
                                 class_name: 'Loan'
  has_many :refused_loans, -> { where agreed: false, borrowing_date: nil, return_date: nil },
                                 class_name: 'Loan'
  has_many :agreed_borrowers, through: :agreed_loans,
                             source: :seeker
  has_many :possible_borrowers, through: :possible_loans,
                             source: :seeker
  has_many :refused_borrowers, through: :refused_loans,
                             source: :seeker
4

1 に答える 1