2011-05-25 97 views
0

我有以下型号:ProjectTask。我使用嵌套属性如下:具有另一个常量属性的嵌套属性

<% 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'例如任务?

+0

我真的don'y明白你的问题,但你为什么不过滤器TIS部分带有'if'语句? – apneadiving 2011-05-25 21:08:17

回答

0

嗨,你可以在许多方面做到这一点:

过滤对象:

<% 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欲了解更多信息。

0

你可以说,自定义关系

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