ruby-on-rails - rails 嵌套对象表单和命名空间 Controller

标签 ruby-on-rails namespaces nested-forms

我有一个这样的嵌套对象:

class Work < ActiveRecord::Base
  belongs_to :issue
  belongs_to :author
  has_many :pages, :class_name => 'Work'
  accepts_nested_attributes_for :pages, :allow_destroy => true
end

class Page < ActiveRecord::Base
  belongs_to :work
end

我有一个用于创建/编辑作品的表单,其中包含嵌套页面对象的字段。我关注了 this post用于设置,所以我使用了一个助手,以便我的表单在您开始时创建一个新页面。
module AdminHelper

  def make_work(work)
    returning(work) do |w|
      w.pages.build if w.pages.empty?
    end
  end

end

然后,在我的形式部分我有:
- form_for make_work(@work) do |f|
  ...
  - f.fields_for :page do |page_f|
    = page_f.label :text
    %br
    = page_f.text_area :text

  %p
    = f.submit "Submit"

显示页面的字段,但是当它被提交时,它会在工作 Controller 中查找创建操作。创建操作位于管理工作 Controller (命名空间)中,因此中断。

我尝试使用命名空间对象,但如果我这样做,它不知道页面:
- form_for make_work([:admin, @work]) do |f|
  ...

我如何将命名空间与嵌套对象表单一起使用,以便它具有 pages 方法,但发布到命名空间的 admin/works Controller ?

最佳答案

我认为你应该有:

fields_for :pages do |page_f|
                ^

如果表单的提交路径正确,还要检查生成的 html。在你的情况下,它应该是这样的:
/admin/works/3

编辑:
fields_for 的示例:
<% form_for @person do |person_f| %>
  <% person_f.fields_for :emails do |email_f| %>
     <%= email_f.text_field :address %>
  <% end %>
<% end %>

它适用于如下关系:
class Person
  has_many :emails
end

确保您没有像这样遍历页面:
<% @work.pages.each do |page| %>
...
  <% fields_for :page do |p| %>
...

关于ruby-on-rails - rails 嵌套对象表单和命名空间 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2076066/

相关文章:

javascript - 嵌套表单中输入的 onclick 设置值

html - 如何添加内嵌背景图片?

namespaces - "using namespace"用于 Doxygen 评论

c# - 子命名空间的命名空间访问问题

vb.net - 将表单放入命名空间会导致 MissingManifestResourceException

ruby-on-rails - Rails 嵌套表单不保存子项

ruby-on-rails - 在两个或多个 Rails 应用程序之间共享代码……git 子模块的替代方案?

ruby-on-rails - 有没有一种方法可以使用Capistrano(或类似工具)与Rails控制台进行远程交互

ruby-on-rails - Rails select_tag "required"选项在 Safari 中不起作用

ruby-on-rails-3 - 导轨 : No 'field_with_errors' when using 'fields_for'