find_or_create_by dans Rails 3 et la mise à jour pour la création de dossiers

Je ne suis pas sûr si je dois être la mise à jour des enregistrements de cette façon, ou si je suis en manque de quelque chose.

J'ai une table avec 5 colonnes (non compris les horodatages et id) 3 qui sont distinctes, et 2 qui seront mis à jour. Les 3 que je vais trouver ou de créer de room_id, la date et la source. Les 2 autres sont des prix et des places disponibles (modification de ces horaires, journaliers, etc.)

Ma question est, dois-je d'abord trouver ou créer le dossier, puis mise à jour (ou créer) le prix et les spots ou je peux le faire tout à la fois? Vous pouvez voir les deux façons que je fais maintenant, et je ne sais pas si sa en fait de faire ce que j'attends.

Aussi, est-il un inconvénient à faire un find_and_create_by comme ça?

Grâce

  private

  def self.parse_data(params,data)
    data.beds.each do |bed|
      room = Room.find_or_create_room(bed.title, params[:id])

      #find clones somehow
      #puts bed.nights.first.price
      bed.nights.each_with_index do |night,index|
        available = Available.find_or_create_by_room_id_and_bookdate_and_source(
          :room_id => room.id, 
          :bookdate => (params[:date].to_date)+index, 
          :source => data.class.to_s#,
          #:price => night.price
        )
        #available.price = night.price
        #available.spots = night.spots
        #available.save
      end

    end
stackoverflow.com/questions/5160073/...
vous pourriez être en mesure de le simplifier avec upsert

OriginalL'auteur holden | 2011-04-07