가) 사용 협회 :
class Market < AR::Base
# * note that if you are not dealing with a legacy schema, you should
# rename user_id to market_id and remove the foreigh_key assignment.
# * dependent => :destroy is important or you'll have orphaned records
# in your database if you ever decide to delete some market
has_many :energy_potions, :foreign_key => :user_id, :dependent => :destroy
end
class EnergyPotion < AR::Base
belongs_to :market, :foreign_key => :user_id
end
b)는 각각 하나를 추가 한 후 연결을 다시 할 필요가 없습니다. 또한 모델로 기능 이동 :
find_or_create_market.restock
class Market
def restock
# * note 4, not 5 here. it starts with 0
(market.energy_potions.size..4).each {market.energy_potions.create!}
end
end
c)를도 만들 수 있습니다! 생성하지 않습니다. 오류를 감지해야합니다. 오류 처리는 응용 프로그램에 따라 다릅니다. 당신이 cron에서 실행 한 이후에 당신이 할 수있는 일이 많습니다. * 경고를 이메일로 보내십시오. * 예외를 잡아서 기록하십시오 (exception_notifier 플러그인 또는 hoptoad 호스팅 서비스) * stderror에 인쇄하고 오류를 보내도록 cron을 구성하십시오. 어떤 이메일.
def self.restock_potions
market = find_or_create
market.restock
rescue ActiveRecord::RecordInvalid
...
rescue
...
end
예,이 방법은 제가 수행 한 해결책과 비슷하지만 모든 새로운 물약을 한 번에 저장할 수있는 방법이 있습니까? 예를 들어, 필요한 추가 3을 작성한 다음 데이터베이스 호출을 하나만 수행하십시오. 아니면 그냥 마이크로 최적화하고 싶습니까? – Kirschstein
@Kirchstein - 그렇습니다. belongs_to/has_many 설정과 연결하여 이러한 작업을 수행 할 수는 있지만, 저장 용량이 많다고 생각하지 않습니다. 최고로 1-5 개의 작은 INSERT INTO 대신 하나의 큰 INSERT INTO를 얻지 만, 그 효과는 측정 가능할 것입니다. – MarkusQ