2010-09-02 30 views
4

Je veux utiliser fields_for sur un sous-ensemble d'enregistrements dans une association. J'ai un modèle Month, qui has_many :payments.Comment transmettre un tableau à fields_for dans Rails?

Mais dans ma forme à mon avis je veux seulement avoir fields_for certains de ces paiements. Par exemple:

- fields_for @month.payments.large 

Cela ne fonctionne pas. Puis-je transmettre un ensemble d'enregistrements à fields_for plutôt qu'à l'approche habituelle du symbole (fields_for :payments)?

Répondre

5

Vous pouvez ajouter une association supplémentaire pour les gros paiements, par exemple:

class Month < ActiveRecord::Base 
    has_many :payments 
    has_many :large_payments, :class_name => "Payment", :conditions => "value > 1000000" 
end 

Après cela, vous pouvez utiliser fields_for de manière commune:

- fields_for :large_payments 

Je pense à résumer cette logique sur un côté modèle est une meilleure approche alors dans la vue.

+2

Bonne réflexion - cela a fait l'affaire. J'ai aussi dû ajouter 'accept_nested_attributes_for: large_payments'. Merci :) – nfm

+2

Vous avez raison. Et vous devriez ajouter 'attr_accessible: large_payments_attributes', si vous protégez votre modèle de paiement de l'assignation de masse (bonne pratique à protéger). – Voldy

5

Vous pouvez cependant utiliser un tableau d'objets sans avoir à créer des associations supplémentaires. Par exemple, disons que dans votre contrôleur vous avez préparé une série de @large_payments, puis dans la vue, vous pouvez effectuer les opérations suivantes:

<%= f.fields_for :payments, @large_payments do |payment| %> ... 

De cette façon, si vous avez une forme assez grand ou plusieurs pages de formulaires , et vous ne voulez pas avoir à créer une association supplémentaire pour chaque groupe que vous voulez afficher, vous n'avez pas à le faire.

+1

Je pourrais faire quelque chose de mal, mais je ne peux pas obtenir cette solution pour travailler. – TheNastyOne