J'essaye de faire une forme complexe (comme le railscast) avec le travail répété-auto-complet (modifié par Pat Shaughnessy) pour créer des articles avec de nombreux auteurs (has-many: through). Je l'ai travaillé aussi longtemps que je veux toujours créer de nouveaux auteurs lorsque je sauvegarde un article. Comment puis-je créer mes notices auteur associées uniquement lorsqu'elles n'existent pas déjà et obtenir une mise à jour de la table des jointures pour quand?Rails et ActiveRecord: Enregistrer un objet parent lors de l'utilisation find-or-create sur has-many enfants
Je sais que vous pouvez utiliser find-or-create pour obtenir ce résultat avec l'objet parent, mais j'en ai besoin pour les objets associés qui sont sauvegardés lorsque @ article.save est appelé pour l'article.
dans articles.rb
before_save :remove_blank_authors
after_update :save_authors
def remove_blank_authors
authors.delete authors.select{ |author| author.fullname.blank?}
end
def new_author_attributes=(author_attributes)
author_attributes.each do |attributes|
authors.build(attributes)
end
end
def existing_author_attributes=(author_attributes)
authors.reject(&:new_record?).each do |author|
attributes = author_attributes[author.id.to_s]
if attributes
author.attributes = attributes
else
author.delete(author)
end
end
end
def save_authors
authors.each do |author|
author.save(false)
end
end
et les auteurs de mon avis partiel:
<div class="author">
<% fields_for_author author do |f| %>
<%= error_messages_for :author, :object => author %>
<%= f.label :fullname, "Author Fullname:" %>
<%= f.text_field_with_auto_complete :author, :fullname, {}, {:method => :get } %>
<%= link_to_function "remove", "$(this).up('.author').remove()" %>
<% end %>
</div>
J'utilise Rails 2.2.2.
Le problème est que je ne vois pas où je pourrais utiliser find-or-create. Au moment où les attributs des auteurs sont construits - new_author_attributes - je n'ai rien à chercher - c'est juste la pré-construction d'objets vides je pense - et au moment où les auteurs sont sauvés, ils sont déjà de nouveaux objets. Ou ai-je tort?
A quoi ressemble votre vue et le code du modèle comme ? –
Tout est juste un truc standard de plaque de chaudière comme l'exemple ici: http://patshaughnessy.net/2009/1/30/sample-app-for-auto-complete-on-a-complex-form – srboisvert