2010-01-16 67 views
0

我有一個嵌套的對象是這樣的:軌道嵌套對象的形式和命名空間的控制器

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" 

顯示頁面的領域,但是當它提交它看起來在作品控制器創建操作。創建操作位於管理工作控制器(名稱空間)中,以便中斷。

我嘗試它與命名空間中的對象,但如果我這樣做,它不知道有關網頁:

- form_for make_work([:admin, @work]) do |f| 
    ... 

如何使用該命名空間嵌套對象的形式,使其具有頁面的方法,但職位名稱空間管理員/工程控制器?

回答

0

這可能不是最好的解決辦法,但你可以只放下你make_work幫手,目標與[:admin, @work]形式(我永遠記得,語法),只是做在你的控制器的w.pages.build調用,如:

控制器:

@work = Work.new 
@page = @work.pages.build 

觀點:

-form_for [:admin, @work] ... 
    -f.fields_for @page ... 
+0

我正在嘗試@ work.pages.build現在在我的控制器中,並且忽略了幫助器。我在admin/works_controller#create中遇到未知屬性錯誤。我很難過。 – River 2010-01-17 02:34:03

+0

你能粘貼你的錯誤嗎? – theIV 2010-01-17 06:58:00

+0

Admin/worksController中的ActiveRecord :: UnknownAttributeError#create 未知的屬性:頁面 – River 2010-01-17 15:20:18

1

我想你應該有:

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| %> 
... 
+0

是的,我有:pages,但它不會像所有那樣渲染嵌套窗體。當我使用複數我得到和未定義的方法錯誤我的'文本'對象。除非我使用單數,否則似乎沒有得到關係? – River 2010-01-17 02:34:35

+0

我使用類似的關係,我總是使用複數版本。我從我的代碼中添加了示例。 – klew 2010-01-17 07:52:13

0

事實證明我的工作模式有問題。我有:

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_NAME =>'工作」是導致它去尋找「對工作類文本」對象,而不是Page類。現在它工作!