【问题标题】:Rails 3.1 not rendering the fields_for from nested_formRails 3.1 没有从nested_form 渲染fields_for
【发布时间】:2011-12-07 10:44:11
【问题描述】:

我有一个has_many :tasks 的项目模型。我在 rails 3.1 中添加了一个嵌套资源,现在尝试使用 nested_form gem 以便能够在编辑项目时添加/删除任务。

我之前在另一个 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 =&gt; 'https://github.com/fxposter/nested_form.git',因为我在某处读到我需要这样做以获得simple_form 支持。我还尝试将 simple_nested_form_for 更改为仅 nested_form_for 无效。

非常感谢任何帮助

【问题讨论】:

  • 由于nested_form 通常不支持simple_form,您还可以查看cocoon,这是我创建的与表单生成器无关的 gem。

标签: ruby-on-rails ruby-on-rails-3.1 nested-forms simple-form nested-form-for


【解决方案1】:

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  

【讨论】:

  • +1 有人解释为什么会这样吗?似乎很奇怪,它根本没有出现......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多