Rails4 Apposito messaggio di avviso per find_or_initialize_by metodo

Aggiornamento per Rails4 da 3.2. Ho la seguente query:

progress = Progress.find_or_initialize_by_chore_id_and_period_and_account_id(chore.id, period[chore.frequency], chore.account_id)

Durante l’esecuzione del test, sto diventando apposito messaggio di avviso

DEPRECATION WARNING: This dynamic method is deprecated. Please use e.g. Post.find_or_initialize_by(name: 'foo') instead. (called from bump_progress at /Users/newimac/RailsApp/bank/app/models/child.rb:200)

Così, ho aggiornato la mia query come segue:

progress = Progress.where('chore.id' => 'chore_id', 'period[chore.frequency]' => 'period', 'chore.account_id' => 'account_id').first_or_initialize

Ma non il suo lavoro. È la mia query è corretta ?

 

2 Replies
  1. 28

    È possibile utilizzare le seguenti:

    Progress.find_or_initialize_by(chore_id: chore.id, period: period[chore.frequency], account_id: chore.account_id) 
  2. 14
    # find_or_initialize_by_
    # Rails 3: 
    Team.find_or_initialize_by_name('Justice League')
    # Rails 4: 
    Team.find_or_initialize_by(name: 'Justice League')
    # or
    Team.where(name: 'Justice League').first_or_initialize

    NB: In questi casi, la parola “initialize” sarà come la chiamata di Team.new. Si può anche sostituire “initialize” ‘crea’, invece di chiamare Team.create, come questo: .find_or_create_by o .first_or_create

    Ampliato e migliorato, ma sulla base di: http://blog.remarkablelabs.com/2012/12/what-s-new-in-active-record-rails-4-countdown-to-2013

    • Per rails 4, itrs non funziona

Lascia un commento