class RandomProduct < ActiveRecord::Base has_one :item_source, :as => :product, :autosave => true, :dependent => :destroy module AutoBuildItemSource def item_source super || build_item_source end end include AutoBuildItemSource end
4 Réponses :
Que diriez-vous de créer le Bien sûr, si vous devez passer des arguments spécifiques à La source d'article, vous pouvez faire quelque chose comme ceci, à la place: p> item_source code> lorsque le fichier
aléatoire code> est créé:
J'ai fini par faire une création avant la validation (B / C, je dois m'assurer que cela crée la source d'élément au moment de la création du produit), mais la solution que vous avez proposée est fondamentalement la même chose. Merci de la valider.
in rails 3, alias_method_chain code> (et
alias_method code> et
alias code>) fonctionne bien:
class User < ActiveRecord::Base
has_one :profile, :inverse_of => :user
delegate :website, :to => :profile, :allow_nil => true
accepts_nested_attributes_for :profile
end
User.new.profile # => nil
User.new.website # => nil
u = User.new :profile_attributes => { :website => "http://example.com" }
u.profile # => #<Profile id: nil, user_id: nil, website: "http://example.com"...>
Non pas que vous avez vraiment besoin d'un bijou pour cela puisqu'il est si simple de faire vous-même, mais voici un gemme qui le rend encore plus facile à déclarer une construction automatique: P>
https://github.com/tylerrick/active_record_auto_build_associations P>
(rails 4, fyi)
Je préfère personnellement la configuration avec Ceci fonctionne aussi bien parce que vous pouvez aussi automatiquement Utilisez des formulaires avec ce qui serait autrement une association vide (Haml parce qu'il est plus agréable): p> Si vous n'aviez pas l'item_source construit déjà, le champ Étiquette et texte t rendu du tout. p> p> après_initialize code> p>