2011-09-02 75 views
5

我正在使用Rails 3.1並正在討論論壇上工作。我有一個名爲Topic的模型,每個模型都有很多Post s。當用戶提出新話題時,他們也應該製作第一個Post。但是,我不知道我該如何以同樣的形式做到這一點。這裏是我的代碼:Rails 3.1中的多個模型在相同的形式?

<%= form_for @topic do |f| %> 
<p> 
    <%= f.label :title, "Title" %><br /> 
    <%= f.text_field :title %> 
</p> 

<%= f.fields_for :post do |ff| %> 
    <p> 
     <%= ff.label :body, "Body" %><br /> 
     <%= ff.text_area :body %> 
    </p> 
<% end %> 

<p> 
    <%= f.submit "Create Topic" %> 
</p> 
<% end %> 

class Topic < ActiveRecord::Base 
    has_many :posts, :dependent => :destroy 
    accepts_nested_attributes_for :posts 
    validates_presence_of :title 
end 


class Post < ActiveRecord::Base 
    belongs_to :topic 
    validates_presence_of :body 
end 

...但這似乎並沒有工作。有任何想法嗎?

謝謝!

回答

6

@巴勃羅的答案似乎有你需要的一切。但更具體...

首先改變這條線在您看來,從

<%= f.fields_for :post do |ff| %> 

這個

<%= f.fields_for :posts do |ff| %> # :posts instead of :post 

然後在您的Topic控制器添加此

def new 
    @topic = Topic.new 
    @topic.posts.build 
end 

這應該讓你去。

+0

+1爲實例。 – Joseph

3

從瑞安貝茨herehere

很好的解釋對於您的具體情況:您正在使用的模型(張貼),而不是關聯:當你調用fields_for(職位)。

同時檢查是否正確使用<%= ... %>。在rails 3.x中,構造的bahaviour改變了。塊助手(form_for,fields_for等)不需要它,而內聯助手(text_field,text_area等)確實需要它。

+0

感謝您的鏈接,但我一直在尋找特定於我的問題的東西。 – jasonbogd

相關問題