Rails 3.1 не рендерит fields_for из nested_form - PullRequest
5 голосов
/ 07 декабря 2011

У меня есть модель проекта, has_many :tasks.Я добавил вложенный ресурс в rails 3.1 и теперь пытаюсь использовать гем nested_form , чтобы иметь возможность добавлять / удалять задачи при редактировании проекта.

Ранее я использовал nested_form в другом приложении Rails3, и онработал нормально, но теперь моя 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 без эффекта.

Любая помощь, высоко ценимая

1 Ответ

15 голосов
/ 07 декабря 2011

В 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  
...