Вложенные атрибуты с другими постоянными атрибутами

У меня есть следующие модели: Project и Task. Я использую вложенные атрибуты следующим образом:

<% 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 %>

А у меня задачи типа.

Как сделать этот код только для задач с type='economical' например?


person pyrchev    schedule 25.05.2011    source источник
comment
Я действительно не понимаю ваш вопрос, но почему бы вам не отфильтровать его в частичном выражении с помощью оператора if?   -  person apneadiving    schedule 26.05.2011


Ответы (2)


Привет, вы можете сделать это разными способами:

Объект фильтрации:

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

Указание экземпляра:

<% @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 %>

Или указать коллекцию, которая будет использоваться:

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

Если это поможет, посмотрите Fields_for для получения дополнительной информации. .

person JCorcuera    schedule 25.05.2011

Вы можете сделать это пользовательскими отношениями

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

Тогда ваш конструктор форм может выглядеть так:

<% f.fields_for :economical_tasks do |builder| %>
  <%= render "due_dates_fields", :f => builder %>
<% end %>
person Unixmonkey    schedule 25.05.2011