2011-05-25 3 views
0

J'ai les modèles suivants: Project et Task. J'utilise les attributs imbriqués comme suit:Attributs imbriqués avec un autre attribut constant

<% form_for @project, :url => consultant_report_path(@project), :html => { :method => :put} do |f| %> 
    <% f.fields_for :tasks do |builder| %> 
    <%= render "due_dates_fields", :f => builder %> 
    <% end %> 
    <p><%= submit_tag %></p> 
<% end %> 

Et j'ai le type de tâches.

Comment est-ce que je peux faire ce code seulement pour des tâches avec type='economical' par exemple?

+0

Je comprends vraiment don'y votre question, mais pourquoi ce filtre ne vous pas tis dans le partiel avec une instruction 'if'? – apneadiving

Répondre

0

Salut vous pouvez accomplir de nombreuses façons:

objet Filtrage:

<% f.fields_for :tasks do |builder| %> 
    <% if builder.object.type == 'economical' %> 
    <%= render "due_dates_fields", :f => builder %> 
    <% end %> 
<% end %> 

Spécification de l'instance:

<% @project.tasks.each do |task| %> 
    <% if task.type == 'economical' %> 
    <% f.fields_for :tasks, task do |builder| %> 
     <%= render "due_dates_fields", :f => builder %> 
    <% end %> 
    <% end %> 
<% end %> 

Ou spécifier la collection à utiliser:

<% f.fields_for :tasks, @economical_taks do |builder| %> 
    <%= render "due_dates_fields", :f => builder %> 
<% end %> 

Hoe cela aide, regardez Fields_for pour plus d'informations.

0

Vous pouvez en faire une relation personnalisée

class Project < ActiveRecord::Base 
    has_many :tasks 
    accepts_nested_attributes_for :tasks 

    has_many :economical_tasks, :class_name => 'Task', 
           :foreign_key => 'project_id', 
           :conditions => ['tasks.type = ?', 'economical'] 
    accepts_nested_attributes_for :economical_tasks 
end 

Ensuite, votre générateur de formulaire peut ressembler à ceci:

<% f.fields_for :economical_tasks do |builder| %> 
    <%= render "due_dates_fields", :f => builder %> 
<% end %> 
Questions connexes