1

OdontologicUnityRails 3.2では、aUserが作成されたときにデフォルトのインスタンスを設定しようとしています。

ユーザー:

require "odontological_unity"
class User < ActiveRecord::Base

    attr_accessible :odontologic_unity, ...
    ...

    belongs_to :odontologic_unity

    after_create :associate_default_unity

    private 
    def associate_default_unity
      ou = OdontologicUnity::DEFAULT
      ou.save!
      self.update_attribute :odontologic_unity, ou
    end

end

OdontologicUnity:

# encoding: UTF-8
class OdontologicUnity < ActiveRecord::Base
  ...

  DEFAULT = OdontologicUnity.new(
    name: 'Actualiza el nombre',
    address: 'Actualiza la dirección',
    nit: 'Actualiza el NIT',
    mission: "Actualiza la misión",
    vision: "Actualiza la visión"
  )
end

コードは例外を発生させることなく機能しますが、DBを見ると、次のようになります(odontological_unity_id: nil):

User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 9]] => #<User id: 9, email: "user2@example.com", password_digest: "$2a$10$BPDmM6stW0sO6tQbwwJCxuWO4hvWIAeSzogEl2GGiqmo...", remember_token: "ltU5RBcifDsr9uPIci9z_A", names: "Example User", lastnames: "Some Lastnames", identity_document_number: "1515", odontological_unity_id: nil, created_at: "2012-06-24 15:00:17", updated_at: "2012-06-24 15:02:05">

奇妙なことに、OdontologicUnityレコードは実際に作成されますが、ユーザーに関連付けられません。

4

1 に答える 1

3

定数ではなく、デフォルトのユーザーを作成する方法を使用することをお勧めします。問題については、代わりに作成前に試して、IDを割り当ててください。

before_create :associate_default_unity

def associate_default_unity
  ou = OdontologicUnity::DEFAULT
  ou.save!
  self.write_attribute :odontologic_unity_id, ou.id
end
于 2012-06-24T16:34:57.577 に答える