Peut-être que je manque quelque chose d'évident (j'espère), mais je rencontre un problème étrange de sauver des enregistrements dans une forme imbriquée. C'est une configuration assez basique, avec une complication mineure en ce que mon modèle LineItem est une relation de deux mots (: line_items). Cependant, j'ai suivi les directives de Rails et cela semble fonctionner correctement. Mes montages créent les relations correctes entre les éléments de ligne et les factures, et tout s'affiche correctement dans mes vues, mais je ne peux pas obtenir d'enregistrements line_item pour les enregistrer correctement (dans ma console Rails ou mes vues).accepte_nested_attributes n'enregistre aucune modification
class Invoice < ActiveRecord::Base
attr_accessible :line_items #and the rest of my relevant attributes
has_many :line_items, :dependent => :destroy
accepts_nested_attributes_for :line_items, :allow_destroy => true
# Rest of my model code
end
class LineItem < ActiveRecord::Base
attr_accessible :invoice_id #and the rest of my relevant attributes
belongs_to :invoice
end
La méthode line_items_attributes=
existe pour mes factures, mais il ne sauve pas de line_items pour de nouvelles factures. Plus irritant, je peux éditer les line_items existants ou les assigner après le fait, mais pas d'un seul coup (le point entier des attributs imbriqués?). Mes vues ne peuvent même pas modifier les éléments de ligne existants via le formulaire de facture. Des idées? Heureux de poster plus de code, mais n'a pas pour souci de brièveté.
Merci à l'avance ...
CODE VIEW (sur demande):
(forme partielle pour les factures)
<%= form_for(@invoice) do |f| %>
<% @invoice.line_items.build unless @invoice.line_items.any? %>
...
<% f.fields_for :line_items do |builder| %>
<%= render 'line_item_fields', :f => builder %>
<% end %>
(forme partielle des articles ligne)
...
<%= f.collection_select :sku_id, @skus, :id, :name, :prompt => true %>
<%= f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)") %>
(javascript)
function remove_fields(link) {
$(link).previous("input[type=hidden]").value = "1";
$(link).up(".fields").hide();
}
S'il vous plaît montrer votre vue code. Utilisez-vous 'fields_for'? – nathanvda
Wow, je n'ai pas été en mesure de repérer quelque chose de mal avec le code que vous avez posté. Je penche pour penser que c'est un problème d'objet, rien à voir avec le contrôleur ou les couches de vue. Je n'ai pas le temps d'y plonger maintenant, j'espère que quelqu'un d'autre pourra intervenir. Avez-vous essayé de définir des attributs dans la console? Si cela échoue, vous avez un problème de modèle. S'il réussit, le problème est dans le contrôleur/vue. Bonne chance, et je reviendrai plus tard. –
@Jaime: La console agit super bizarre. Je peux créer une facture et définir des attributs pour un nouveau 'line_item' ou plusieurs. Lorsque je sauvegarde réellement, les validations passent, mais aucun élément_ligne n'est créé (il me reste donc une facture vide et aucune notification indiquant que quelque chose s'est mal passé). Je ne peux pas manipuler ou détruire quoi que ce soit dans mes opinions. Je deviens fou ... – Nuby