2010-07-06 3 views
1

Je tente de mettre à jour certains paramètres imbriqués à partir d'un formulaire. Je peux voir que les paramètres im venant du formulaire sont corrects, cependant la base de données n'est pas mise à jour.Mise à jour des paramètres imbriqués ne fonctionne pas .. quoi de mal?

la vue

<% form_for @order do |f| %> 
    <% f.fields_for :itemgroups do |ff, i| %> 
    <% ff.fields_for :items do |fff| %> 
     <%= ff.text_field :text, :id => "textField", :disabled => true %> 
     <%= ff.text_field :price, :class => "priceField", :disabled => true %> 
     <%= fff.check_box :registered, :class => i %> 
    <% end %> 
    <% end %> 
    <%= submit_tag 'Save', :disabled_with => "Saving..." %> 
<% end %> 

ItemGroup classe

class Itemgroup < ActiveRecord::Base 
    belongs_to :order 
    has_many :items, :dependent => :destroy 
    has_one :kind 

    accepts_nested_attributes_for :items, :kind 
end 

classe Commander

class Order < ActiveRecord::Base 
    has_many :itemgroups, :dependent => :destroy 
    has_many :items, :through => :itemgroups, :dependent => :destroy 
    has_many :kinds, :through => :itemgroups 

    accepts_nested_attributes_for :itemgroups, :allow_destroy => true 

    validates_associated :itemgroups, :items ,:kinds 
end 

La partie importante du contrôleur.

def update 
    @order = Order.find(params[:id]) 

    if @order.update_attributes(params[:order]) 
    flash[:notice] = 'Order was successfully edited.' 
    redirect_to(@order) 
    else 
    flash[:notice] = 'An error occured.' 
    render(:action => :edit) 
    end 
end 

Répondre

-1

Correction du problème! La ligne validates_associated a été supprimée. Puis cela a fonctionné

1

changement

<% f.fields_for :itemgroups do |ff, i| %> 
    <% ff.fields_for :items do |fff| %> 
    <%= ff.text_field :text, :id => "textField", :disabled => true %> 
    <%= ff.text_field :price, :class => "priceField", :disabled => true %> 
    <%= fff.check_box :registered, :class => i %> 
    <% end %> 

Pour ÉDITÉ

<% f.fields_for :itemgroups do |ff, i| %> 
    <%= ff.text_field :text, :id => "textField", :disabled => true %> 
    <%= ff.text_field :price, :class => "priceField", :disabled => true %> 
    <% ff.fields_for :items do |fff| %> 
    <%= fff.check_box :registered, :class => i %> 
    <% end %> 

et vérifier

+0

qui donnera l'erreur de compilation puisque la fff.check_box est en dehors de la boucle qui définit fff – Flexo

+0

@Flexo: - ooohhh désolé je l'EDIT s'il vous plaît vérifier à nouveau – Salil

+0

Cela ne marche pas non plus. J'ai besoin que la boucle soit comme elle est, parce que je veux une copie du texte et du champ de prix associés à chaque case – Flexo

Questions connexes