5

我有一個項目模型,has_many :tasks。我在rails 3.1中添加了嵌套資源,現在嘗試使用nested_form gem來編輯項目時能夠添加/刪除任務。Rails 3.1沒有渲染fields_for nested_form

我之前在另一個Rails3應用程序中使用過nested_form,它工作正常,但現在我的fields_for部分不呈現任何東西。

這裏是我的代碼:

#project.rb 
class Project < ActiveRecord::Base 

    attr_accessible :nr, :name, :client_id, :project_status_id, :hidden, :active, :description, :tasks_attributes 


    has_many :tasks, :dependent => :destroy 
    accepts_nested_attributes_for :tasks, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true 


end 


#task.rb 
class Task < ActiveRecord::Base 

    belongs_to :project 

end 

#views/projects/_form.html.erb 
<%= simple_nested_form_for @project do |form| %> 

    <%= form.input :nr, :label => 'Nr' %> 
    <%= form.input :name, :label => 'Name' %> 
    <%= form.association :client, :collection => Client.all(:order => 'name'), :prompt => "Choose a Client" %> 
    <%= form.input :description, :label => 'Description' %> 
    <%= form.input :active, :label => 'Active' %> 
    <%= form.input :hidden, :label => 'Hidden' %> 
    <div class="task_fields"> 
    <%= form.fields_for :tasks do |task_form| %> 
     <%= task_form.input :name %> 
     <%= task_form.input :description %> 
     <%= task_form.input :deadline %> 
     <%= task_form.link_to_remove "Remove this task" %> 
     <p><%= form.link_to_add "Add a task", :tasks %></p> 
    <% end %> 
    </div> 
    <div class="actions"> 
    <%= form.button :submit %> 
    </div> 
<% end %> 

,並在我的路線:

resources :posts do 
    resources :comments 
    end 

但是當我訪問該頁面在瀏覽器中的

<div class="task_fields"></div> 

呈現空。沒有fields_for和任何。 nested_form.js被加載,並且我在我的GEMFILE中指向gem "nested_form", :git => 'https://github.com/fxposter/nested_form.git',因爲我閱讀某處需要這樣做才能獲得simple_form支持。我也嘗試將simple_nested_form_for僅更改爲nested_form_for而沒有任何效果。

任何幫助higly讚賞

+0

由於'nested_form'通常不支持'simple_form',你也可以看看[繭](https://開頭github上。 com/nathanvda/cocoon),這是我創建的一種形式建造者不可知論的寶石。 – nathanvda

回答

15

projects#new,你必須初始化至少一個任務,否則你fields_for部分將不會顯示任何內容。

# projects_controller.rb 
def new 
    @project = Project.new 
    @project.tasks.new 
end 

如果你想多個任務:

n.times { @project.tasks.new } # replace n with the number of tasks needed 
+0

呵呵,那很快!感謝隊友.. – tmaximini

+0

這是一個救生員:D – AnkitG

+1

+1有沒有人有解釋爲什麼發生這種情況?看起來很奇怪,它根本沒有出現...... – corbin